0

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? というコード内の場所にあります。

4

1 に答える 1

0

この railscastでは、ログインしていないユーザーの処理方法など、承認に cancan を使用する方法を示します。

于 2012-08-09T18:30:20.403 に答える