2011-06-25 4 views
0

Rails 2.3.11Rails sélectionner helper - définir par défaut?

Je fait lu this answer, mais il ne fonctionne pas pour moi.

je voudrais l'option par défaut pour cette zone de sélection pour être le event_id passé à travers l'URL.

f.select :event_id, @events, :selected => url_args["event_id"] 

Un exemple @events est [["SC 2 Tournament", 195], ["Obstacle Course", 196], ["Mortal Combat", 197]]

qui suit également ne fonctionne pas:

  • ajoutant ".to_i" à "url_args [" event_id »
  • utilisant options_for_select (@events , url_args ["ID_événement"]

Merci!

Répondre

2

C'est beaucoup plus facile si vous utilisez l'assistant collection_select:

f.collection_select :event_id, @events, :id, :name 

ensuite pour sélectionner l'option par défaut (et ont qui être sélectionné sur pageload), vous pouvez simplement l'attribuer à tout objet est que le formulaire est pour dans le contrôleur. par exemple, comme ceci:

def new 
    @events = Event.all 
    @thing = Thing.new(:event => @events.first) 
end 

Je ne suis pas sûr où votre url_args vient, mais je devine que c'est probablement d'une URL dans l'param, dans ce cas, vous pouvez le faire:

Thing.new(:event_id => params[:event_id]) 

Une dernière chose - collection_select ne fonctionnera pas tout à fait avec @events comme vous l'avez spécifié, car vous utilisez un tableau imbriqué, quand il attend un tableau d'objets qu'il peut appeler id et name sur afin de récupérer les valeurs et afficher du texte pour les options de sélection. Pour corriger cela, redéfinir simplement @events au sein de votre contrôleur, en utilisant l'un des trouveurs ActiveRecord, tels que Event.all ou Event.find(..).

Avez-vous du sens?

+0

Je n'ai jamais utilisé de collections auparavant, je pourrais donc les examiner plus tard. J'ai pu résoudre mon problème simplement en échangeant mon habitude '' url_args' méthode pour params', comme ceci: <% = f.select: event_id, @events,: selected => params [: event_id] .to_i% > – Benjin

Questions connexes