ссылка на атрибуты в моделях с отношениями own_to через вложенное пространство имен

Хорошо, так что я подумал, что понял, как работают спецификации отношений в рельсах, но я боролся с этим в течение дня.

Некоторый контекст, у меня есть две модели 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?

Заранее спасибо.

Скотт

7
задан Scott 4 January 2011 в 18:35
поделиться