0

用户登录后,我希望他们被重定向到 /users/2 或 users/44,就像普通资源一样。(这样管理员只需知道他们的 id 就可以轻松查看任何用户的个人资料页面。)

我不知道我的路线文件中发生了什么。当用户登录时,我可以在日志中看到它正确地进行了身份验证,并且我的 application_controllerafter_sign_in_path_for被调用。

但这是我尝试重定向到 user_path(current_user) 时遇到的错误。

No route matches {:action=>"show", :controller=>"users", :user_id=>11}

我的config/routes.rb

  devise_for :users, :path_names => {:sign_in => 'signin', :sign_out => 'signout', :sign_up => 'signup' }

  devise_scope :user do
    get "signin", :to => "devise/sessions#new"
    get "signout", :to => "devise/sessions#destroy", via: :delete
    get "signup", :to => "devise/registrations#new"
  end

  resources :users do
    member do
      get 'settings', to: 'users#edit'
    end
  end

我的application_controller.rb

class ApplicationController < ActionController::Base
  ...

  def after_sign_in_path_for(resource)
    redirect_to user_path(:user_id=>current_user.id)
  end
end

resource :users块不应该负责创建用户显示路径吗?我的 users_controller.rb 中有一个 show 方法。请帮忙,我一直在努力让它工作 2 天。

4

1 回答 1

0

我的问题是我正在redirect使用 after_sign_in_path(resource) 方法,而不仅仅是返回路径:

  def after_sign_in_path_for(resource)
    return user_path(:user_id=>current_user.id)
  end

是这样做的正确方法。

于 2013-07-02T00:19:30.360 回答