2010-03-02 3 views
1

Vous pouvez le faire lorsque vous utilisez form_for(@model...):Rails FormTagHelper manquantes importantes méthodes de sélection et collection_select

collection_select(:subscription, :duration, ["Some", "Values"], :to_s, :to_s, {:prompt => true})

Et la sortie est quelque chose comme ceci:

<select id="subscription_duration" name="subscription[duration]"> 
    <option value="">Please select</option> 
    <option value="Some">Some</option> 
    <option value="Values">Values</option> 
</select> 

Si vous utilisez un formulaire sans un modèle, vous n'avez pas cette belle méthode d'aide pour créer les balises <option> pour vous. Au lieu de cela, vous devez faire ceci:

select_tag("subscription", '<option value="Some">Some</option><option value="Values">Values</option>') 

FormHelper et FormOptionsHelper travailler ensemble sur une forme enveloppant un modèle, et ils ont le select et collection_select pour rendre la vie facile. Pour une form_tag plaine (sans modèle), cependant, il n'y a pas FormOptionsTagHelper. FormTagHelper a une méthode select_tag, mais vous devez écrire manuellement les options qui est un déchet. Il semble que cela a été corrigé quelque part.

Je pourrais écrire mon propre assistant pour me débarrasser de l'écriture manuelle de ces étiquettes d'option, mais c'est ce que fait FormOptionsHelper#collection_select ... Existe-t-il un équivalent pour les formulaires sans modèles?

Répondre

1

sélectionnez et collection_select peut être appelée sans modèle. J'utilise habituellement une combinaison de deux mots significatifs, et un tableau de paires [étiquette, valeur] à sélectionner. Le seul inconvénient est d'avoir à utiliser le format abc [xyz].

Vous avez essayé d'utiliser options_for_select?

select_tag 'Account', options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40") 
Questions connexes