Rails 3: Pourquoi une boîte de sélection ne passe pas la bonne valeur?
-
11-10-2019 - |
Question
J'ai la boîte de sélection suivante qui a été créée en utilisant emboîtées:
<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"
a été créé en passant :selected => "22"
aux options de f.select
.
Le problème est que peu importe quelle option est sélectionnée, la valeur soumise est toujours "22"
.
Je remarque qu'une entrée cachée est créée, que je crois que la cause du problème:
<input type="hidden" value="22" name="product[shop_attributes][id]" id="product_shop_attributes_id">
Ainsi, il y a 2 éléments avec id=product_shop_attributes_id
.
Ce qui pourrait faire ce champ caché à générer?
Code pertinent de la création de la boîte de sélection:
<%= form_for @product do |f| %>
<%= f.fields_for :shop do |sf| %>
sf.select(:id, <options>, {:prompt => true, :selected => <default_value>})
<% end %>
<% end %>
Relevant code du contrôleur:
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 %>
Je vois ici toujours la même (quel que soit l'option choisie):
"product"=>{"shop_attributes"=>{"id"=>"22"},...}
La solution 2
Le problème est, comme je l'ai mentionné dans la question, le champ d'entrée cachée avec le même id
que le select
.
J'ai ouvert un question distincte pour déterminer pourquoi cela se produit.
Autres conseils
Il n'y a rien de mal à les rails HTML générés. Il est probablement la façon dont vous accédez dans votre contrôleur. Pourriez-vous poster le code de rails d'origine qui a généré ce code HTML et le code que vous utilisez pour le traiter?