2009-08-23 5 views
0

Voici une vue d'ensemble de mon domaine:rails: indiquer le verbe HTTP dans un redirect_to

  • un utilisateur une liste des cours
  • l'utilisateur peut « sélectionner » un cours. L'action correspondante est invoquée avec le verbe PUT , stocke le cours_id dans une variable de session et redirige vers l'action "show" du cours sélectionné.
  • lorsque l'utilisateur n'a que 1 cours disponible, je veux le rediriger directement vers le seul cours disponible (et invoquer la méthode "select" avant, du cours ).

A partir de là, je vois 2 options:

  1. garder le « select » action lorsque l'utilisateur clique sur le lien et ajouter une nouvelle action lorsque la sélection est automatique ... mais n » t semble très DRY (même si je pouvais refactoriser du code)
  2. appelez l'action PUT du contrôleur lui-même ... mais je n'ai pas trouvé comment (est-ce encore possible)?

Toute alternative est la bienvenue :)

Merci pour votre aide.

P.

Répondre

0

Dans le contrôleur de cours:

def index 
    @courses = Course.all 
    if @courses.length == 1 #if only one course 
    @course = @courses[0] #get that course 
    session[:course_id] = @course.id #set the session 
    redirect_to :action => "show", :param => "#{@course.id}" #redirect 
    end 
    respond_to do |format| 
    format.html 
    format.xml { render :xml => @line_items } 
    end 
end 
+0

Salut, merci pour la suggestion. Je voulais éviter de dupliquer la session [], mais s'il n'y a pas d'autre choix, je pense que ce sera un mal nécessaire. Je vais peut-être en faire une méthode autonome. Merci! P. – Pierre

+0

Pierre, essayez: montrent def @course = Course.find (session [: course_id] au lieu de montrent def = @course Course.find (params [: id]) et vous devriez pouvoir vous débarrasser du param dans la ligne redirect_to –

Questions connexes