Rails 3.2アプリでは、Devise+CanCanを使用しています。アプリは以前、ログインしたユーザーのみにアクセスを制限していました。サイトの特定のセクションを読むことができるゲストユーザー/能力を追加しているところです。
これを設定する「正しい」方法、具体的にはコントローラーで必要なbefore_filter :authenticate!
との組み合わせを理解するのに苦労しています。load_and_authorize_resource
これに取り組んでいる間、私は能力クラスを最小限に取り除きました。
#Ability.rb
class Ability
include CanCan::Ability
def initialize(user_or_admin)
user_or_admin ||= User.new
can :manage, :all
end
end
モデルのない/静的なページのホームコントローラー
#home_controller.rb
class HomeController < ApplicationController
load_and_authorize_resource
def index
...some stuff
end
end
と
#application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :authenticate!
...more stuff
end
この設定により、ログインしていないユーザーはDeviseサインインページにリダイレクトされます。
before_filter :authenticate!
アプリケーションコントローラから削除すると、次のエラーuninitialized constant Home
が発生します。activesupport-3.2.11/lib/active_support/inflector/methods.rb
load_and_authorize_resource
ホームコントローラーから削除すると、このエラーはなくなります。
これは私の簡略化されたテスト能力クラスでは問題ありませんが、役割と能力を追加し始めると、CanCanにホームコントローラーを処理させる必要があります。つまり、load_and_authorize_resource
呼び出す必要があります。
誰かが削除されたときにこのエラーが発生する理由を理解するのを手伝ってくれますか?before_filter :authenticate!
ゲストユーザーのためにDevise+Cancanを設定する「正しい」方法を説明する情報を教えてください。これまでに見つけた情報は、Abilityクラスの設定方法のみを説明しており、Deviseの構成方法は説明していません。