michael hartl によるサンプル チュートリアルによるレールの学習を行っています。彼の最後のアプリでは、誰もが何をするにもサインアップする必要があります。サインアップ/サインインしていないユーザーが他のユーザーのプロファイルとそのマイクロポストを表示できるように、私は自分のものを作ろうとしています. 問題は、現在のユーザーが app/helpers/sessions_helper.rb で定義されていることです。サインインおよびサインアウト機能は、基本的にセッションを開始または終了します。
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
def current_user?(user)
user == current_user
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_path, notice: "Please sign in."
end
end
def sign_out
current_user = nil
cookies.delete(:remember_token)
end
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
clear_return_to
end
したがって、 current_user はアプリケーションの他の多くの場所で使用されます。これは、署名されていないユーザーをページにリンクしようとすると、current_user が使用されている場所で current_user が未定義であるというエラーが発生することを意味します (これはもちろん本当です)。どうすればこれを回避できますか。未署名のユーザーを現在のユーザーの形式として一時的に定義する方法はありますか。現在のユーザーの定義に何かを追加できますか?
編集:エラーは多くの場所で発生します。サインインしていないユーザーが現在のユーザーを使用するページにアクセスすると、未定義のメソッド「admin?」のようなエラーが発生します。nil:NilClass の場合。この例は、current_user.admin? というコード内の場所にあります。