RailsアプリでCanCanをセットアップしようとしていますが、奇妙な動作が発生しています。
私のability.rb
ファイルは次のようになります。
class Ability
include CanCan::Ability
def initialize(user)
can :create, User
can :create, Template
can :read, :all
end
end
templates_controller.rb
:
class TemplatesController < ApplicationController
load_and_authorize_resource
def index
authorize! :create, Template
end
end
ここまでは順調ですね。CanCanは、に行っても文句を言いません/templates
。奇妙な振る舞いがビューから始まります。can?
質問する場合はfalseを返します:create
が、またはTemplate
を要求する場合はtrueを返します。:read
User
views/templates/index.html.erb
:
<% if can? :create, Template %>
Doesn't show up.
<% end %>
<% if can? :read, Template %>
Does show up.
<% end %>
<% if can? :create, User %>
Does show up.
<% end %>
ああ、template.rb
それが重要な場合に備えて、これが私のモデルです:
class Template < ActiveRecord::Base
attr_accessible :title, :template, :user_id
has_many :radlibs
belongs_to :user
has_reputation :votes, source: :user, aggregated_by: :sum
end
これは私を本当に困惑させました、なぜそれらがコントローラーで動作するとき、ビューの特定のパーミッションでしか取得できないのですか?