#ruby-on-rails #ruby-on-rails-3 #forms
#ruby-on-rails #ruby-on-rails-3 #формы
Вопрос:
У меня есть форма, которая обновляет две разные модели, используя fields_for. Данные для элементов внутри fields_for отправляются, но данные для исходного form_for отсутствуют
Вот форма:
<%= form_for @cart, :remote => true do |cart| %>
<%= fields_for @cart.order, :remote => true do |order| %>
<%= order.select :country, options_for_select(@country_options) %>
<%= order.text_field :zip %>
<% end %>
<%= cart.select :shipping_method,options_for_select(@shipping_options) %>
<% end %>
Вот что содержится в параметрах в действии обновления:
{"_method"=>"put", "utf8"=>"342234223", "action"=>"update", "order"=>{"zip"=>"48360", "country"=>"US"}, "id"=>"1", "controller"=>"carts"}
Почему поле shipping_method не отображается в параметрах?
Вот сгенерированная HTML-форма:
<form accept-charset="UTF-8" action="/carts/3" class="edit_cart" data-remote="true" id="edit_cart_3" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" value="✓" type="hidden"><input name="_method" value="put" type="hidden"></div>
<select id="order_country" name="order[country]"><option value="US">United States</option></select>
<input id="order_zip" name="order[zip]" size="30" value="90001" type="text">
<select id="cart_shipping_method" name="cart[shipping_method]"><option value="FedEx Ground" selected="selected">FedEx Ground: $5.00</option></select>
</form>
Комментарии:
1. Можете ли вы показать выводимый HTML-код?
Ответ №1:
Я думаю, вам, возможно, стоит попробовать что-то вроде этого:
<%= cart.select :shipping_method, options_from_collection_for_select(@shipping_options, 'id', 'name') %>
Где 'name'
находится параметр, который вы хотите отобразить. В противном случае я бы предложил проверить html формы. Если у выбранных элементов нет value
атрибута, что-то не так с вашим erb
options_for_select
работает только для массивов 2xn
Комментарии:
1. Данные options_for_select в порядке, я отредактировал свой вопрос, показывающий вывод html, но мне ничего не кажется неправильным…
Ответ №2:
Хорошо, тогда я вижу что-то еще, что может вызвать проблемы, думаю, это должно быть:
<%= cart.fields_for @cart.order, :remote => true do |order| %>