アプリにDeviseとCanCanを使用しています。ユーザーがサインインすると、自分のアカウント ページが表示されます。このためのカスタム リダイレクトを設定しました。
def after_sign_in_path_for(resource)
url_for :controller => '/users', :id => current_user.id, :action => 'myaccount'
end
ただし、ユーザーが登録するときに同じことをしようとすると、つまり after_sign_up_path_for(resource) を使用すると、次のエラーが表示されます。
NoMethodError in UsersController#show
undefined method `user' for #<User:0x25d15e8>
これは、CanCan 用にセットアップした次の capability.rb ファイルを参照しています。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
can :manage, :all do |all|
all.try(:user) == user
end
それが言っている行は、問題は all.try(:user) == user. なぜこれが問題を引き起こしているのか理解できませんか?リダイレクトに何を入れても、常に {app}/users/22 などに移動し、このエラーが発生するようです。