Ok, also dachte ich, ich verstehe, wie die Beziehungsspezifikationen in Schienen funktionieren, aber ich kämpfe seit einem Tag damit.Referenzieren von Attributen in Modellen mit "objects_to" -Beziehungen durch einen verschachtelten Namespace
Einige Kontext, ich habe zwei Modelle Autos & Modellnamen (zB Impala, Ladegerät, etc), wo Autos Instanzen von Modellnamen sind, und Modellnamen ist wirklich nichts mehr als eine Nachschlagetabelle von Modellnamen und einige andere Modelle Level-Attribute. Der Modellname-Controller ist im Admin-Namespace verschachtelt, da nur Administratoren CRUD-Modellnamen verwenden können. Endbenutzer können dem Cars-Modell Instanzen von Autos hinzufügen. alle
class CreateCars < ActiveRecord::Migration
def self.up
create_table :cars do |t|
t.string :chassis_number
t.string :description
t.references :admin_model_name
t.timestamps
end
end
class CreateAdminModelNames < ActiveRecord::Migration
def self.up
create_table :admin_model_names do |t|
t.string :model
t.integer :sort_index
#...additional attributes removed
t.timestamps
end
Der Admin CRUD von Modelname:
Also, in routes.rb ich habe:
resources :cars
namespace :admin do resources :model_names end
des Modells sind wie folgt definiert:
class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
belongs_to :admin_model_name
end
Die Migrationen sind toll arbeiten. Das Problem ist in den Autoansichten. Ich denke, ich sollte ein bestimmtes Autos Modellnamen wie solche werden Referenzierung:
<%= @car.admin_model_names.Model =>
Aber ich bekomme die Fehlermeldung:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
Ich habe versucht, auf dem ModelNames Modell der attr_accessible, aber ohne Erfolg. Die zugrunde liegenden Daten werden korrekt referenziert. Ich habe auch eine HABTMT-Beziehung zwischen Autos & Benutzer und das alles funktioniert gut Referenzierung der jeweils anderen Attribute aus den verschiedenen Entitäten Ansichten. Aber ich konnte das nicht zur Arbeit bringen. Liegt es an der verschachtelten Ressource & Admin Control Vererbung?
Die einzige Referenzierungsmethode Ich fand, das funktioniert ist:
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
Aber das scheint wirklich zu viel Code (und Kosten eines Fund) zu sein, um dieses Attribut zu erhalten. Gibt es einen Schienen-Weg?
Vielen Dank im Voraus.
Scott
kann ich nicht kommentieren ... also das ist eigentlich ich nicht vorgeben zu einer Antwort ... aber für was ich sehe sollte nicht Ihr @car Anruf "admin_model_name" ... in der Einzahl? – Daniel
Ja, Sie haben Recht. Ich hatte mehrere Varianten ausprobiert und den Code aus einem der 'naja mal sehen, ob das funktioniert' eingefügt. Mit ihr in Singular wie <% = @ car.admin_model_name.Modell%> bekomme ich die nicht initialisierte Konstante Car :: AdminModelName – Scott