1

私はRailsアプリに取り組んでおり、Deviseをセットアップしてすべてのデフォルト設定で作業しており、CanCanをセットアップしています。

以下は、'Ability' クラスの内容です (いくつかのチュートリアルに基づく、実際には私のコードではありません)。

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user_signed_in?
        can :manage, :all
    end
  end
end

authorize! :edit, @documentコントローラーの 1 つにサンプルを追加したので、ファイル自体が機能することはわかっています。if user_signed_in?行 (そしてもちろん)を削除すると、endそのcan :manage, :all行が存在するときにdocumentコントローラーのアクションにアクセスできますが、それがないと、「アクセスが拒否されました」と表示されます。

ただし、行が存在する状態でこれを実行しようとするとuser_signed_in?、次のエラーが発生します。

DocumentsController#edit の NoMethodError

未定義のメソッド「user_signed_in?」為に #

そして、興味深いことに、user_signed_in?私のビューでは完全に機能し、ログイン ボックスまたは現在ログインしているユーザーの詳細をif...elseブロックで表示します。

ここにアクセスする方法はuser_signed_in?ありますか?長期的には、ユーザーのレコードから値を読み取ってアクセス レベルを特定するつもりですが、変数が同じ場所から取得されるため、この概念が機能することが重要です。

ありがとう!

4

1 に答える 1

1

何をしようとしているのか正確にはわかりませんがDevise::Controllers::HelpersAbilityクラス に含めuser_signed_in?てからsigned_in?(:user).

于 2013-06-15T18:24:09.607 に答える