Devise と Omniauth を使用しています。current_user
したがって、コントローラーでメソッドを使用できるはずです。実際、たとえば、 my でtasks_controller
:
def index
@tasks_remaining = Task.where(:user => current_user, :done => false)
@tasks_done = Task.where(:user => current_user, :done => true)
end
current_user
期待どおりに動作します。current_user
非常に奇妙なことに、RubyMineは見つからないことを警告し、灰色の下線を引きます。しかし、このコードはとにかく機能します。
しかし、私の中authentications_controller
で、
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
sign_in_and_redirect(:user, authentication.user)
else
current_user.authentications.create(:provider => ominauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "success"
redirect_to authentication_url
end
end
current_user
ここで、その行を実行するとエラーが発生します。それは言います:
undefined method `authentications' for nil:NilClass
この時点までデバッグしたところ、current_user
変数が実際にこのスコープに存在しないことがわかりました。
では、なぜあるコントローラーでは機能し、別のコントローラーでは機能しないのでしょうか? Rails 4 と Ruby 2 を使用しています。Railscast 235 と 236 に従っています。