2010-12-07 7 views
1

J'ai un emboîtées, comme:Rails: sélectionnez la valeur d'aide après un échec de créer

<% form_for @invoice do |f| %> 
<%= render :partial => "invoice_item_fields", :locals => {:f => f} %> 
<% end %> 

et _invoice_items_fields:

<% f.fields_for :invoice_items do |builder| %> 
<%= link_to_remove_fields "remove", builder %> 
<%= builder.collection_select(:product_id, Product.all, :id, :name) %> 
<%= builder.text_field :quantity, :size => 4,%> 
<% end %> 

Quand je soumets le formulaire et passer pas les validations il render la nouvelle action à nouveau. La chose est la valeur sélectionnée pour: product_id n'est pas rappelé, mais la: quantité est ok. J'ai lu que je devrais configurer une variable d'instance dans le contrôleur avec la valeur de l'option sélectionnée et faire quelque chose comme:

<%= builder.collection_select(:product_id, Product.all, :id, :name, 
:selected => @selected_product) %> 

mais la chose est l'application pourrait avoir beaucoup: invoice_items, donc je don Je ne sais pas quoi faire pour le champ select "souvenez-vous" des valeurs.

Merci.

+0

Avez-vous regardé cet exemple (pas exactement la même chose mais ..): http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select. Aussi, pourriez-vous poster un commentaire avec le HTML généré (seulement le select). Je parie que votre utilisation de collection_select est fausse. Lorsque la validation est passée, enregistre-t-elle l'enregistrement dans votre base de données avec le produit sélectionné? –

+0

Salut pourriez-vous montrer le code de vos contrôleurs, pls? Si votre page contient plusieurs formulaires pour @invoice (ou tout autre objet avec des champs imbriqués), comment gérez-vous la requête? – Bohdan

Répondre

0

Ce type de problème est souvent lié à l'id du produit qui est un entier, mais à l'ID du produit que le générateur de formulaires compare à une chaîne. Si tel est le problème, une solution du service non-beau-mais-ça-marche est d'appeler to_i:

builder.collection_select(builder.object.product_id.to_i, Product.all, :id, :name) 

J'aimerais voir une façon plus agréable de le faire. L'autre chose qui est souvent gênant lors du débogage des sélections est que si vous actualisez la page, firefox laisse un select sur l'entrée en surbrillance - il ne consulte plus le HTML et sélectionne ce qu'il doit maintenant être sélectionné. Cela signifie que si vous avez initialement le mauvais attribut sélectionné, puis corrigez le code et cliquez sur Actualiser, votre navigateur ne vous montrera pas réellement le changement.

+0

Bonjour, je pense que je n'utilisais pas correctement l'assistant collection_select, comme le dit Marcel. Maintenant im en utilisant "collection_select (: product_id, Product.all,: id,: nom)" et fonctionne. Merci à votre réponse maintenant im sur la bonne piste. – pbruna

Questions connexes