Ok, entonces pensé que entendía cómo funcionan las especificaciones de relación en los rieles, pero he estado luchando con esto por un día.haciendo referencia a los atributos en modelos con relationships_to relaciones a través de un espacio de nombre anidado
Contexto, tengo dos modelos Cars & Nombres de modelos (por ejemplo, Impala, Charger, etc.), donde Cars son ejemplos de nombres de modelos, y Model Names realmente no es más que una tabla de búsqueda de nombres de modelos y algún otro modelo atributos de nivel. El controlador del nombre del modelo está anidado en el espacio de nombres del administrador, ya que solo los administradores pueden usar los nombres del modelo CRUD. Los usuarios finales pueden agregar instancias de autos al modelo de Cars.
Así, en routes.rb tengo:
resources :cars
namespace :admin do resources :model_names end
se definen de la modelo como:
class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
belongs_to :admin_model_name
end
Las migraciones son:
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
El administrador de CRUD ModelName todo funciona bien El problema está en las vistas del auto. Creo que debería estar haciendo referencia a un nombre de coches modelo en particular, como por ejemplo:
<%= @car.admin_model_names.Model =>
Pero me sale el error:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
he probado el attr_accessible en el modelo ModelNames pero fue en vano. Los datos subyacentes están referenciados correctamente. También tengo una relación HABTMT entre los usuarios de Cars & y todo funcionó bien haciendo referencia a los atributos de los demás desde las diferentes vistas de las entidades. Pero no he podido hacer que esto funcione. ¿Es debido al recurso anidado & admin control inheritance?
El único método de referencia que encontré que funciona es:
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
Pero esto en realidad parece ser demasiado código (y el costo de un hallazgo) para llegar a ese atributo. ¿Hay un camino de Rails?
Gracias de antemano.
de Scott
No puedo comentar ... así que esto es en realidad yo no pretendo una respuesta ... pero por lo que veo, ¿tu llamada @car no debería llamar "admin_model_name" ... en singular? – Daniel
Sí, estás en lo correcto. Probé varias variantes y pegué el código de uno de los 'bueno, veamos si esto funciona'. Con él en singular como <% = @ car.admin_model_name.Model%> obtengo constante no inicializada Car :: AdminModelName – Scott