CanCan工作错误

时间:2014-03-20 11:02:40

标签: ruby-on-rails cancan

我无法理解我错过了什么。

ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
      user ||= User.new # guest user (not logged in)
      can :read, Post
  end
end

post_controller.rb

class PostController < ApplicationController
  before_filter :authenticate_user!

  def index
    @posts = Post.all

    authorize! :read, @posts
  end

end

index.html.haml

- if can? :read, @posts
  you can!
- else
  you cannot!

使用此代码,我总是得到CanCan::AccessDenied in PostController#index例外。它说#8行authorize! :read, @posts

有问题

1 如果我像这样更改post_controller.rb中的代码:

post_controller.rb

class PostController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource

  def index
    @posts = Post.all

  end
end

异常消失了,但我从我的观点中得到you cannot!。我希望得到you can!消息。

2。如果我在 ability.rb 中将can :read, Post更改为can :read, :all,我会按预期收到you can!条消息。但这不是我想要使用的。

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

实际上,您使用can :read, Post或在循环can :read, post时使用@posts

中间没有。


顺便说一句,如果您使用load_and_authorize_resource,则无需添加@posts = Post.all

它们会自动加载。


PS:你为什么要检查你的控制器和你的视图?