Rails fields_for不通过所有参数

时间:2011-10-14 05:07:16

标签: ruby-on-rails ruby-on-rails-3 forms

我有一个使用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"=>"\342\234\223", "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>    

2 个答案:

答案 0 :(得分:0)

我认为你应该尝试这样的事情:

<%= cart.select :shipping_method, options_from_collection_for_select(@shipping_options, 'id', 'name') %>

'name'是您要显示的参数。否则我建议检查表格的html。如果选择的项目没有value属性,那么您的erb

就会出错

options_for_select仅适用于2xn数组

答案 1 :(得分:0)

好的,那么我看到其他可能导致问题的东西,它认为它应该是:

<%= cart.fields_for @cart.order, :remote => true do |order| %>