尝试首先在他们的个人资料页面上使用经过身份验证的用户登陆,而不是使用家庭#index - 使用Devise

时间:2013-02-12 20:18:54

标签: ruby-on-rails ruby devise

我的思绪正在变慢......这是一个简单的问题......我知道。请原谅我的无知......

我想将经过身份验证的用户定向到该用户个人资料页面。

注意:我正在使用Devise。

注2:你可以在这里看到整个routes.rb文件.... pastie.org/6142383

当我做“耙路线”时,我将此作为路线信息....

profile GET        /profiles/:id(.:format)                       profiles#show

所以在我的routes.rb文件中我试过了......

authenticated :user do
  root :to => 'profiles#show'
end

但我收到错误“app / controllers / profiles_controller.rb第17行”,这就是......

@profile = Profile.find(params[:id])

所以我需要以某种方式在我的routes.rb中指出params [:id],但我对如何...感到困惑。

authenticated :user do
  root :to => '?'  # how to land user on www.website.com/profile/1
end 

感谢您的时间......

更新:

我正在使用gem'更好的错误'(在这里找到这个宝石)http://selfless-singleton.rickwinfrey.com/2012/12/13/better-errors/错误读取....

ActiveRecord::RecordNotFound at /
Couldn't find Profile without an ID

ProfileControllers#show
app/controllers/profiles_controller.rb, line 17

然后告诉我确切的行......

12   end
13 
14   # GET /profiles/1
15   # GET /profiles/1.json
16   def show
17     @profile = Profile.find(params[:id])
18 
19     respond_to do |format|
20       format.html # show.html.erb
21       format.json { render json: @profile }
22     end

2 个答案:

答案 0 :(得分:4)

除了您的其他个人资料之外,您还想要Singular Resource。以下是在Devise中的作品:

resources :users

authenticate(:user) do
  get '/profile', to: 'users#show'
end

然后在users_controller.rb

def show
  if params[:id]
      @user = User.find(params[:id])
  else
    # Show the currently logged in user
    @user = current_user
  end
  ....
end

要在成功登录后自定义用户登陆的位置,请在ApplicationController中添加/自定义此方法:

def after_sign_in_path_for(resource)
 current_user_path
end

其他有用的指南:https://github.com/plataformatec/devise/wiki/_pages

答案 1 :(得分:0)

以下是答案:

def after_sign_in_path_for(resource)
  profile_path(resource.profile)
end