1

当我的用户登录时,我希望他们默认使用自己的“显示”页面,因为我不希望查看用户列表。所以为了做到这一点,我改变了默认的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 节目说

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

还是我需要修改我的

root :to => "users#show"

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

谢谢

4

1 回答 1

0

你这样做;

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

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

现在确保当 user#show 发生时, current_user 被查找并用于对抗 users#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

都很好!

谢谢

于 2013-06-10T15:21:39.063 回答