【问题标题】:Rails 3: Why a select box does not pass the right value?Rails 3:为什么选择框没有传递正确的值?
【发布时间】: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 =&gt; "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


【解决方案1】:

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

【讨论】:

  • 我在问题中添加了相关信息。谢谢!
  • 请看我的更新。我注意到生成了一个具有相同 id 的隐藏字段。是什么原因造成的?
  • 请粘贴您的 ERB 的其余部分。
【解决方案2】:

问题是,正如我在问题中提到的,隐藏的输入字段与 idselect 相同。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 2021-04-21
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多