如何告诉CanCan只获取特定记录?

时间:2012-03-16 03:07:22

标签: ruby-on-rails cancan

我有我试图加载的帖子,但只想加载那些published_at属性不是nil的帖子。我已经尝试了wiki文档中提到的各种组合,但是保持异常并且不确定我缺少什么。如何告诉CanCan任何用户都可以:阅读已发布publish_at!= nil?

的帖子

3 个答案:

答案 0 :(得分:3)

在你的Ability.rb中:

can :edit, Post do |post|
  post.published_at.nil?
end

如果您真的在谈论CanCan授权而不是查询帖子:)如果您只想查询,范围将在您的Post模型中执行:

scope :not_published, where(:published_at => nil)

编辑:范围为NOT nil:

scope :published, where('published_at is not NULL')

答案 1 :(得分:1)

我认为这有点不同。 Cancan用于授权,而不是查询索引。你会做类似@books = Book.find(:all,:conditions => [“published_at not null”])

配置完成后,您可以检查用户是否能够更新/编辑/创建/销毁/等记录。如果你想列出它们,你会经历它们的正常索引。如果您想添加编辑按钮,如果用户能够修改记录,那么您可以放置​​if can? :update, book然后显示编辑按钮。

答案 2 :(得分:0)

只需反思并使用cannot方法。

# If it is NOT hidden, allow to read
can :read, Post, :hidden_at => nil

# If it is NOT published, disallow the read
cannot :read, Post, :published_at => nil

您必须按Ability Precedence

中的说明调用cannot方法 AFTER can方法调用