Хорошо, так что я подумал, что понял, как работают спецификации отношений в рельсах, но я боролся с этим в течение дня.
Некоторый контекст, у меня есть две модели Cars и названия моделей (например, Impala, Charger и т. д.), где Cars являются экземплярами имен моделей, а имена моделей на самом деле представляют собой не более чем справочную таблицу имен моделей и некоторых других атрибутов уровня модели. Контроллер имени модели вложен в пространство имен администратора, поскольку только администраторы могут использовать имена моделей CRUD. Конечные пользователи могут добавлять экземпляры автомобилей в модель Cars.
Итак, в routes.rb у меня есть:
resources :cars
namespace :admin do resources :model_names end
Модели определены как:
class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
belongs_to :admin_model_name
end
Миграции:
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
CRUD администратора для ModelName все работают отличный. Проблема в просмотрах автомобилей. Я думаю, что мне следует ссылаться на название конкретной модели автомобиля, например:
<%= @car.admin_model_names.Model =>
Но я получаю сообщение об ошибке:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
I ' Я пробовал attr_accessible на модели ModelNames, но безрезультатно. Ссылки на базовые данные указаны правильно. У меня также есть отношения HABTMT между машинами и пользователями, и все они отлично работали, ссылаясь на атрибуты друг друга из разных представлений сущностей. Но не смог заставить это работать. Это связано с наследованием вложенных ресурсов и административных элементов управления?
Единственный работающий метод ссылок, который я обнаружил, это:
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
Но на самом деле, похоже, слишком много кода (и затраты на поиск), чтобы добраться до этого атрибута. Есть ли способ Rails?
Заранее спасибо.
Скотт