【发布时间】:2010-12-20 05:05:50
【问题描述】:
我有以下使用嵌套表单创建的选择框:
<select name="product[shop_attributes][id]" id="product_shop_attributes_id">
<option value="23">KMART</option>
<option value="24">Super Shop</option>
<option selected="selected" value="22">TARGET</option>
<option value="new">Create New Shop</option>
</select>
selected="selected" 是通过将:selected => "22" 传递给f.select 选项创建的。
问题是无论选择什么选项,提交的值总是"22"。
我注意到创建了一个隐藏输入,我认为这是导致问题的原因:
<input type="hidden" value="22" name="product[shop_attributes][id]" id="product_shop_attributes_id">
因此,id=product_shop_attributes_id 有 2 个元素。
什么可能导致这个隐藏的输入字段生成?
选择框创建相关代码:
<%= form_for @product do |f| %>
<%= f.fields_for :shop do |sf| %>
sf.select(:id, <options>, {:prompt => true, :selected => <default_value>})
<% end %>
<% end %>
相关控制器代码:
def edit
@product = Product.find(params[:id]) # the select box indeed gets it's initial value from @product
end
def update
@temp = params.inspect
end
update.html.erb:
<%= @temp %>
我在这里看到的总是一样的(无论选择什么选项):
"product"=>{"shop_attributes"=>{"id"=>"22"},...}
【问题讨论】:
-
您不需要传递 :selected - 您正在使用模型表单。您只需要使用 select_tag。
标签: ruby-on-rails select ruby-on-rails-3 nested-forms