Rails 3: Warum ein Auswahlfeld nicht den richtigen Wert zu übergeben?
-
11-10-2019 - |
Frage
Ich habe folgendes Auswahlfeld, das erstellt wurde verschachteltes Formular:
<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"
indem :selected => "22"
zu f.select
Optionen erstellt wurde.
Das Problem ist, dass egal, was Option ausgewählt ist, der übermittelte Wert ist immer "22"
.
bemerkte ich, dass ein versteckter Eingang geschaffen, die ich verursacht das Problem glauben:
<input type="hidden" value="22" name="product[shop_attributes][id]" id="product_shop_attributes_id">
So gibt es zwei Elemente mit id=product_shop_attributes_id
.
Was zu diesem verborgenen Eingabefeld führen könnte erzeugt werden?
Relevante Code der Auswahlbox Erstellung:
<%= form_for @product do |f| %>
<%= f.fields_for :shop do |sf| %>
sf.select(:id, <options>, {:prompt => true, :selected => <default_value>})
<% end %>
<% end %>
Relevante Controller-Code:
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 %>
Ich sehe hier immer das gleiche (egal welche Option ausgewählt ist):
"product"=>{"shop_attributes"=>{"id"=>"22"},...}
Lösung 2
Das Problem ist, wie ich in der Frage erwähnt, das verborgenen Eingabefeld mit dem gleichen id
als select
.
öffnete ich eine andere Frage zu untersuchen, warum dies geschieht.
Andere Tipps
Es ist nichts falsch mit den HTML erzeugt Schienen. Es ist wahrscheinlich so, wie Sie es in Ihrem Controller sind erreichbar. Könnten Sie den ursprünglichen Schienen Code schreiben, dass diese HTML und den generierten Code Sie verwenden, um es zu verarbeiten?