2009-09-19 2 views
1

J'ai travaillé avec option_groups_from_collection_for_select et je n'ai pas vu un moyen de l'utiliser sur un formulaire lié à un modèle sans coder en dur les balises select. Bien que je ne travaille que depuis quelques semaines sur Rails, il semblerait qu'il existe une meilleure façon de le faire (par exemple collection_select ou même select).Est-il mauvais de coder les balises lors de l'utilisation de option_groups_from_collection_for_select

Existe-t-il un "Rails Way" pour éviter de coder en dur la balise select> < lors de l'utilisation de option_groups_from_collection_for_select?

code de mon point de vue (site catégories has_many et je suis en train de regrouper ma liste par site)

<select id="item_category_id" name="item[category_id]"> 
    <%= option_groups_from_collection_for_select(Site.all, :categories, :name, :id, :name, @item.category_id) %> 
</select> 

Répondre

3

Travaillez-vous avec un objet dans un formulaire_for? Si ce ne génère donc ce dont vous avez besoin:

form_for @item do |f| 
    f.grouped_collection_select(:category_id, Site.all, :categories, :name, :id, :name, :include_blank => true) 
end 

ou sans form_for

grouped_collection_select(:item, :category_id, Site.all, :categories, :name, :id, :name, :include_blank => true) 

Peer

+0

Merci beaucoup. C'est exactement la solution que je cherchais! J'ai été incapable de trouver quoi que ce soit à ce sujet dans la documentation car je travaillais avec Rails 2.3.2 et cela est devenu disponible dans Rails 2.3.4. –

0

Select ne fonctionne pas?

<%= select :item, :category_id, option_groups_from_collection_for_select(Site.all, :categories, :name, :id, :name, @item.category_id) %> 
+0

Je l'ai essayé, cependant, il fait double emploi avec le code HTML comme ceci:

2

Essayez select_tag au lieu de sélectionner, par ex.

+0

Merci pour la réponse! C'est très proche. Le seul problème restant est d'inclure une ligne vide avec: include_blank => true –

+0

Hmm cela fonctionne-t-il? <% = Select_tag: item, option_groups_from_collection_for_select (Site.all,: catégories,: nom,: id,: nom, @ item.category_id), {: include_blank => true}%> – Jen

+0

Jen - non, ce n'est pas le cas inclure une option vide mais l'ajoute à la balise de sélection (