2010-05-12 12 views
1

Nous avons un formulaire pour soumettre des notes pour un certain restaurant dans un de nos vues/restaurants/show.html.erb. Nous souhaitons uniquement que les utilisateurs connectés créent de nouvelles évaluations. Nous avons misRedirection indésirable après authentification

before_filter: login_required,: seulement => [: nouvelle: créer]

(mais nous avons aussi essayé seulement ": créer") au-dessus de notre RatingsController. Si nous cliquons sur le bouton "Soumettre" après avoir tapé les détails de l'évaluation, nous sommes invités à nous connecter (ce que nous voulons). Après avoir rempli le nom d'utilisateur et le mot de passe et soumis le formulaire de connexion, nous sommes redirigés vers e. g./restaurants/36/évaluations, mais nous voulons être redirigés vers d'où nous venons - e. g./restaurants/36 /. Nous avons essayé redirect_to (: back), mais cela nous redirige vers le formulaire de connexion. La nouvelle note n'est pas enregistrée dans la base de données.

Une idée de comment nous pouvons changer la redirection et comment s'assurer que la note est enregistrée?

Merci!

+0

Avez-vous les gars jamais comprendre cela? –

Répondre

1

Clause de non-responsabilité: Je n'utilise pas . (Vous pouvez regarder dans authlogic si vous avez un choix - il y a un Railscast about it si vous voulez une intro.) Même ainsi, stocker la valeur "arrière" dans la session devrait encore fonctionner. Voici ce que je fais dans ma situation:

# app/controllers/application.rb 

before_filter :authorize 

protected 

    # Override in controller classes that should NOT require authentication (such as logging in, by definition) 
    def require_login? 
    return true 
    end 

private 

    def authorize 
    if require_login? && current_user.nil? 
     session['return_to'] = request.request_uri 
     redirect_to login_url 

     return false 
    end 
    end 

# app/controllers/user_sessions_controller.rb 

def create 
    # [...] 

    if @user_session.save 
    flash[:notice] = 'Successfully logged in.' 

    if session['return_to'].nil? 
     redirect_to root_url 
    else 
     redirect_to session['return_to'] 
    end 
    else 
    render :action => 'new' 
    end 
end 

# app/controllers/users_controller.rb 

# Just as an example: 
def require_login? 
    return case action_name 
    when 'new' 
    false 
    when 'create' 
    false 
    else 
    true 
    end 
end 

Mon application nécessite presque toutes les actions pour exiger l'authentification, ce qui explique pourquoi je require_login? retour true. Je pense que vous pouvez ajuster l'idée session['return_to'] à vos besoins.

Je pense que je suis partie de cette idée de ce post: http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/

Questions connexes