将用户路由到用户#在设计密码更改后显示

时间:2013-06-07 16:04:50

标签: ruby-on-rails devise

当我的用户登录时,我希望他们默认为他们自己的“显示”页面,因为我不希望用户列表可见。所以要做到这一点,我已经更改了默认的after_sign_in,就像这样;

def after_sign_in_path_for(resource)
    user_path(current_user)
end

效果很好。密码更改后出错。我需要修改根路径,以便在更改后进入显示页面

root :to => "users#show"

..但是现在,显然,我没有:id,所以我得到了

ActiveRecord::RecordNotFound in UsersController#show

Couldn't find User without an ID

......这很有道理。我正在使用配备设备的控制器,所以我的问题是,如何挂钩密码更改并将用户发送到他们的显示页面?我是否应该只能编辑def show来说

def show
    @user = User.find(params[:id]) || current_user

还是我需要修改

root :to => "users#show"

反映current_user的id,假设devise将用户自动重新登录....或者它是否从未将其注销......?

谢谢

1 个答案:

答案 0 :(得分:0)

你这样做;

首先,更新您的路由文件以使用Devise的状态,以便对经过身份验证的用户进行不同的处理

authenticated :user do
  root :to => "users#show"
end
unauthenticated :user do
  devise_scope :user do 
    get "/" => "devise/sessions#new"
  end
end

现在确保当用户#show发生时,查找current_user并用于打击用户#show没有的事实:id

def show
if params[:id].nil? # if there is no user id in params, show current one
  @user = current_user
else
  @user = User.find(params[:id])
end

一切都很好!

由于