2010-03-15 8 views
3

En essayant de faire une page de connexion pour mon application de rails qui ressemble à "www.domain.com" et lorsque vous vous connectez, vous êtes toujours dans le domaine "www.domain.com ". Est-il possible de mapper 2 actions différentes à la même URL en utilisant des routes? Twitter le fait de cette façon, vous vous connectez à twitter.com et une fois connecté, vous êtes toujours sur twitter.com. Après une connexion réussie, redirigez-vous vers l'URL racine.2 pages utilisant la même URL en utilisant les voies

Répondre

0

routes.rb

map.resources :landings 
# let's assume that, home page corresponds to landings/index 
map.root :controller => "landings", :action => "index" 

UserSessionsController

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
    redirect_to root_url 
    else 
    render :action => :new 
    end  
end 
1

Vous ne pouvez pas le faire en modifiant simplement les routes, mais vous pouvez faire une sorte de déclaration conditionnelle dans votre contrôleur .

def index 
    if logged_in 
    render :action => 'show' 
    else 
    render :action => 'new' 
    end 
end 

def show 
    ... 
end 

def new 
    ... 
end 

Il y aura de nombreuses façons de le faire, bien sûr.

+1

Vous avez raison, mais 'render: action => 'show'' n'exécute pas cette action. Il ne rend qu'une vue correspondante. Donc, tout ce qu'il faut faire dans les actions 'show' et 'new' doit être fait dans l'action 'index' (selon votre nom). – klew

+0

@kley - Bon point. Il peut être préférable d'utiliser une redirection, sinon initialisez tout ce dont vous auriez besoin pour l'action avant d'appeler le rendu. – Karl

+0

Si vous utilisiez la redirection, l'URL changerait. @espinet ne veut pas que ça change :) – klew

Questions connexes