2011-03-16 3 views
1

(NOTE: J'ai lu http://shiningthrough.co.uk/Select-helper-methods-in-Ruby-on-Rails, mais ne sais pas quoi choisir)En utilisant collection_select ou sélectionnez ou select_tag

J'ai un formulaire qui sera utilisé comme filtre de recherche (La méthode est d'obtenir). Ce qui précède produit la sortie que je veux pour les étiquettes, mais il n'y a pas de paramètre "sélectionné" où je pourrais transmettre une valeur params. J'ai aussi ne pas le fait que le nom est bien sûr [id], je préfère avoir ce nom course_id

que je pouvais faire:

<%= select_tag(:course_id, raw("<option>All Courses</option>") + options_from_collection_for_select(@courses, :id, :title, params[:course_id])) %> 

Mais je n'aime pas le fait que je suis options de concaténation, mais cela pourrait être mon meilleur pari.

Des avis, des suggestions?

Répondre

2

Doit-il s'agir d'une valeur params qui définit 'selected' dans votre cas? La valeur 'selected' pour collection_select est basée sur la valeur de @ course.id - vous pouvez vous assurer que @course représente celle qui doit être sélectionnée. En ce qui concerne le nom, je voudrais rester avec le défaut Rails même lors de l'écriture de votre propre HTML. C'est ce qui dicte comment les paramètres entrent dans votre action. Si vos éléments ont des noms cours [id], bien sûr [nom], bien sûr [type], etc., les params seraient

{ :course => { :id => xx, :name => xx, :type => xx } } 

qui est très pratique car vous pouvez appeler

Course.new(params[:course]) 

également , vous n'avez pas besoin de fermer vos formulaires avec votre propre balise HTML. La form_tag méthode prend un bloc:

<%= form_tag('/posts') do -%> 
    <div><%= submit_tag 'Save' %></div> 
<% end -%> 

Et enfin ... Je l'ai utilisé select_tag et construit une liste d'options avant. Il peut être laid mais vous pouvez le construire dans des méthodes dans l'assistant de vue où il n'encombre pas votre rhtml et où il peut être testé unitairement.