Ok, quindi ho pensato di capire come funzionano le specifiche della relazione in rotaie, ma ho lottato con questo per un giorno.riferimento agli attributi nei modelli con appartiene alle relazioni attraverso uno spazio dei nomi nidificato
In alcuni contesti, ho due modelli Automobili & Nome modello (es. Impala, Caricabatterie, ecc.), Dove Auto è un'istanza di Nomi modello e Nomi modello in realtà non è altro che una tabella di ricerca di nomi modello e qualche altro modello attributi di livello. Il controller Nome modello è nidificato nello spazio dei nomi admin in quanto solo gli amministratori possono nomi di modelli CRUD. Gli utenti finali possono aggiungere istanze di automobili al modello Cars.
Così, in routes.rb ho:
resources :cars
namespace :admin do resources :model_names end
del modello sono definiti come:
class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
belongs_to :admin_model_name
end
le migrazioni sono:
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
L'amministratore CRUD di ModelName tutto funziona alla grande Il problema è nelle visualizzazioni dell'automobile. Penso che dovrei essere riferimento a un particolare nome di vetture modello come ad esempio:
<%= @car.admin_model_names.Model =>
Ma ottengo l'errore:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
Ho provato l'attr_accessible sul modello ModelNames ma senza alcun risultato. I dati sottostanti sono referenziati correttamente. Ho anche una relazione HABTMT tra gli utenti di Automobili & e tutti hanno funzionato correttamente facendo riferimento agli attributi degli altri dalle diverse viste delle entità. Ma non sono stato in grado di farlo funzionare. È dovuto all'ereditarietà del controllo di gestione della risorsa nidificata &?
L'unico metodo di riferimento che ho trovato che funziona è:
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
Ma questo in realtà sembra essere troppo codice (e la spesa di un ritrovamento) per arrivare a tale attributo. Esiste un modo Rails?
Grazie in anticipo.
Scott
Non posso commentare ... quindi in realtà non sto fingendo una risposta ... ma per quello che vedo non dovrebbe chiamare @ admin_model_name "in singolare? – Daniel
Sì, hai ragione. Avevo provato più varianti e incollato nel codice da uno dei "ben vediamo se funziona". Con esso in singolare come <% = @ car.admin_model_name.Model%> ottengo costante non inizializzata Car :: AdminModelName – Scott