routes.rb中的动态Root拥有用户#show

时间:2011-06-11 12:46:39

标签: ruby-on-rails ruby routes

我有一个登录部分,一旦有人成功登录,我希望它返回到他们的个人资料用户#show。你会如何制作routes.rb呢?

4 个答案:

答案 0 :(得分:1)

我假设你有一些东西负责登录和管理会话。

假设您有一个会话控制器,则会创建一个新的会话登录。 (登录表单创建一个新会话,如果用户名 - 密码组合正确,则会向会话的create方法发送帖子

redirect_back_or user

你的routes.rb有

resources :users

这是会话控制器的示例

class SessionsController< ApplicationController的      def new        @title =“登录”      端

 def create
   user = User.authenticate(params[:session][:name],
     params[:session][:password])
   if user.nil?
     flash.now[:error] = "Invalid email/password combination."
     @title = "Sign in"
     render 'new'
   else
     sign_in user
     redirect_to user
   end
 end

 def destroy
   sign_out
   redirect_to root_path
 end
end

答案 1 :(得分:0)

我不知道我是否完全理解这个问题,但我的第一个想法是我不会在routes.rb中管理这个问题。我假设你至少有:

[controller]/[some login type action]
users/show

作为可行的行动。除此之外,我将使用重定向从您成功登录后转移到users / show操作。

您可以查看redirects上的此链接以及layouts and rendering上的此链接以获取更多信息......

答案 2 :(得分:0)

我明白了。在我的routes.rb中我有

  match '/account/:id', :to => 'users#show', :as => 'account'

在我的用户会话控制器中,如果他们成功登录,则会创建@current_user_session。然后创建@current_user。然后我将成功登录路由到routes_path(@current_user),如routes.rb中所定义

  def create
    @user_session = UserSession.new(params[:user_session])

    respond_to do |format|
      if @user_session.save
        @current_user_session = UserSession.find
        @current_user = current_user_session && current_user_session.record
        format.html { redirect_to(account_path(@current_user), :notice => 'Successfully logged in.') }
        format.xml  { render :xml => @user_session, :status => :created, :location => @user_session }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @user_session.errors, :status => :unprocessable_entity }
      end
    end
  end

此时创建@current_user是否有任何缺陷?或者,

中的任何安全漏洞

答案 3 :(得分:0)

您不需要在routes.rb中执行此操作。只需在控制器中编程该行为。

在登录控制器中设置redirect_to show_user_path(@user)

如果您要配置路线以便'/'为'/ user / show',那么:

root :to=>'user#show'