Ассоциация Has_many не видна? ошибка отношения активной записи

Я пытаюсь создать новую запись изображения в своей галерее. Пользователи могут создать одного поставщика, а оттуда — множество галерей. В каждой галерее может быть много изображений. Проблема возникает во время нового действия при попытке создать новое изображение через новый вид изображения. При этом мой метод контроллера...

def new
  @picture = current_account.vendor.galleries.pictures.new
end

Однако это возвращает «изображения» ошибки неопределенного метода для отношения activerecord.

NoMethodError в Client::PicturesController#новый неопределенный метод `pictures' для ActiveRecord::Relation...

К вашему сведению, полный обход ассоциации с помощью @picture = Picture.new работает нормально, но я пытаюсь правильно определить (надеюсь, это правильное слово) галерею/поставщика и учетную запись пользователя.

Что меня смущает, так это то, что ассоциация, кажется, работает непосредственно через форму создания/редактирования галереи через fields_for и accepts_nestred_attributes_for (@gallery = current_account.vendor.galleries.new — это новый метод галереи), но создание специального изображения отдельно от редактирования галереи/ новые ошибки формы согласно предыдущему тексту.

Я попытался бросить жестко запрограммированный идентификатор галереи непосредственно в @picture = current_account.vendor.galleries(:id => 4).pictures.new просто как отчаянную догадку, но изображения остаются сломанными.

Я чувствую, что мне не хватает чего-то очевидного здесь. Есть предположения?

Спасибо за уделенное время.

обрезанные модели...

class Gallery < ActiveRecord::Base
  belongs_to :vendor
  has_many :pictures

    class Picture < ActiveRecord::Base
      belongs_to :vendor
      belongs_to :gallery

(Я проверил, что в таблице изображений есть столбец Gallery_id:integer)

отрезанные маршруты (отрезано пространство имен клиента)...

ресурс :vendor do

 resources :galleries do
   resources :pictures
 end

конец


person StrandedPanda    schedule 01.01.2012    source источник


Ответы (1)


Если Vendor has_many :galleries, вам нужно указать, из какой галереи создать изображение:

@picture = current_account.vendor.galleries.first.pictures.build

или что-то еще, что выбирает конкретную галерею.

[править] Правильная форма

@picture = current_account.vendor.galleries(:id => 4).pictures.new

было бы

@picture = current_account.vendor.galleries.find { |g| g.id == 4 }.pictures.build

Вы также можете попробовать (поскольку galleries является отношением)

@picture = current_account.vendor.galleries.where(:id => 4).pictures.new
person Michelle Tilley    schedule 01.01.2012
comment
Спасибо за помощь, Брэндон! Теперь все работает, как и ожидалось. Ваши примеры очень помогли. Последний пример изначально возвращал ту же ошибку отношения, но вставка «first» перед изображениями в соответствии с вашим первым примером запустила и запустила. Я думаю, мне нужно больше читать о ленивой загрузке. [: У меня все еще меньше минимального количества очков репутации, необходимых для того, чтобы stackexchange позволил мне проголосовать за вас, но я вернусь и сделаю это, как только наберу минимум. - person StrandedPanda; 01.01.2012