Я использую fields_for
в моей форме, как такfields_for посылая массив вместо Hash (Rails 3)
<%= form_for @user %>
...
<%= f.fields_for :photos do |f2| %>
<%= f2.radio_button :public, 'true' %>
<% end %>
...
<% end %>
Вот радио кнопки он генерирует:
<input id="user_photos_attributes_0_public_true" name="user[photos_attributes][0][public]" type="radio" value="true" />
<input id="user_photos_attributes_0_id" name="user[photos_attributes][0][id]" type="hidden" value="1" />
<input id="user_photos_attributes_1_public_true" name="user[photos_attributes][1][public]" type="radio" value="true" />
<input id="user_photos_attributes_1_id" name="user[photos_attributes][1][id]" type="hidden" value="4" />
<input id="user_photos_attributes_2_public_true" name="user[photos_attributes][2][public]" type="radio" value="true" />
<input id="user_photos_attributes_2_id" name="user[photos_attributes][2][id]" type="hidden" value="5" />
...
У меня это пользователь .rb
has_many :photos
accepts_nested_attributes_for :photos
Когда форма отправлена, я получаю эту ошибку:
Error during failsafe response: ActionView::Template::Error
TypeError (expected Hash (got Array) for param `photos_attributes'):
Кто-нибудь знает, почему это происходит?
Btw, я использую Rails 3.0.0.rc2
Сохранение происходит со стандартными '@ user.update_attributes (params [: user])'. К сожалению, я не могу просмотреть хэш параметров, потому что он умирает, прежде чем печатать его на консоли. Я предполагаю, что хэш hash имеет такой массив, как вы его написали, - поэтому все еще не уверен, почему он жалуется на это. Спасибо за ответ! –
@Brian, вы можете сделать 'logger.debug (params.inspect)' для проверки. –
Привет, Андрей, спасибо за ответ. Так на самом деле, где бы я положил эту линию? Он умирает до того, как войдет в действие моего контроллера или application_controller. Это какой-то отказоустойчивый для рельсов, который умирает при первой обработке запроса, поэтому он даже не входит ни в один из моих кодов. Или есть где-то еще, чтобы добавить его? –