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