Объект Nil с использованием универсального fields_for

Я пытаюсь передать параметры, используя общий метод fields_for. У меня есть форма:

<%= form_for @Album do |album| %>
...
<%= fields_for :photo do |photo| %>
  <%= photo.text_field :name %>
  <%= photo.text_area  :description %>
  ...
<% end %>
<% end %>

Я надеялся, что эта форма будет генерировать фото [имя] и фото [описание], чтобы при отправке формы мой контроллер мог проверить, существуют ли параметры [: фото]... #сделать что-нибудь. Причина, по которой я не использую вложенные формы, заключается в том, что иногда эти поля формы даже не используются.

Проблема в том, что я получаю сообщение об ошибке для строки fields_for:photo. Он говорит, что у вас есть нулевой объект, когда вы этого не ожидали! Вы могли ожидать экземпляр массива.

Как я могу сделать это универсальное fields_for без нуля?


person yoshyosh    schedule 12.04.2012    source источник


Ответы (1)


Вы столкнулись с этой проблемой, потому что в вашем контроллере не определена переменная @photo. fields_for, как и form_for, предназначен для использования в качестве оболочки для существующего объекта. Символ :photo превращается в переменную экземпляра, но он равен нулю, поэтому вы сталкиваетесь с этими ошибками. Вы можете исправить это, определив фотографию в действии контроллера:

@photo = @album.photos.first # if there's an existing photo
@photo = @album.photos.new # if there's not

Если вы вообще не хотите определять объект, вам нужно просто использовать теги обычной формы вместо fields_for.

person Veraticus    schedule 12.04.2012
comment
Спасибо, я, вероятно, продолжу и буду использовать теги обычной формы, я привел несколько плохой пример, используя альбом и фотомодель с тем, что я пытаюсь сделать. Но это определенно проясняет ситуацию, большое спасибо! - person yoshyosh; 12.04.2012