Rails 3:なぜ選択ボックスが適切な値を渡さないのですか?
-
11-10-2019 - |
質問
ネストされたフォームを使用して作成された次の選択ボックスがあります。
<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
問題は、質問で述べたように、同じものを持つ隠された入力フィールドです id
として select
.
私はAを開けました 別々の質問 なぜこれが起こるのかを調査するため。
他のヒント
Rails生成されたHTMLには何の問題もありません。それはおそらくあなたがあなたのコントローラーでそれにアクセスする方法です。このHTMLを生成した元のRailsコードと、処理するために使用しているコードを投稿できますか?
所属していません StackOverflow