Не было ли видно много ассоциаций?ошибка отношения activerecord - PullRequest
3 голосов
/ 01 января 2012

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

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

Однако это возвращает неопределенную ошибку метода 'pictures' для отношения activerecord.

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

Fyi, полностью обойдя ассоциацию с помощью @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)

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

ресурс: продавец делает

 resources :galleries do
   resources :pictures
 end

конец

1 Ответ

1 голос
/ 01 января 2012

Если 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
...