Rails 3:为什么选择框没有传递正确的值?

时间:2010-12-20 05:05:50

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

我有以下使用嵌套表单创建的选择框:

<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">

因此,有2个元素id=product_shop_attributes_id

可能导致生成此隐藏输入字段的原因是什么?


选择框创建的相关代码:

<%= 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"},...}

2 个答案:

答案 0 :(得分:1)

rails生成的HTML没有任何问题。这可能是您在控制器中访问它的方式。你可以发布生成这个HTML的原始rails代码和你用来处理它的代码吗?

答案 1 :(得分:1)

正如我在问题中所提到的,问题是隐藏的输入字段与id具有相同的select

我打开了separate question来调查为什么会发生这种情况。