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