1

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を返します。:readUser

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

これは私を本当に困惑させました、なぜそれらがコントローラーで動作するとき、ビューの特定のパーミッションでしか取得できないのですか?

4

1 に答える 1

2

したがって、問題は「テンプレート」ものクラスであるということでしたActionView。つまり、CanCanはコントローラーで私のモデルを見ていましActionView::Templateたが、ビューで見ていましたが、私のモデルだったので、それ::Templateを変更することを考えます。

<% if can? :create, ::Template %>
Does show up.
<% end %>

<% if can? :read, Template %>
Does show up.
<% end %>

<% if can? :create, User %>
Does show up.
<% end %>
于 2012-10-19T06:52:21.767 に答える