CanCan:'can'方法再次获取记录,即使它们已经获取了

时间:2011-01-26 21:14:04

标签: ruby-on-rails-3 activerecord cancan

我正在尝试传递像这样的对象

    <% if( can? :change, comment.karma, comment.user_id)%>
        #blah blah blah
    <% end %>

在我的能力中。我有以下内容:

    can :change, Karma do |karma, owner_id|
      !karma.changers.map(&:user_id).include? user.id and owner_id != user.id
    end

每次刷新页面时,cancan都会触发查询(来自ability.rb)以获取业力,然后更换该业力,即使我已经获取了它(使用:include => { :karma => :changers }选项进行查询控制器)。

加了:

我猜测它正在发生,因为业力正在存储一个链接:包含对象(不是对象本身),当我将它传递给方法时实际上会被破坏。所以我现在正在考虑序列化..

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在模型中执行查询时,请尝试使用此语法

@comments = Comment.where(:foo_id => Bar.id).includes(:karma => :changers)

并查看问题是否仍然存在。

作为参考,http://m.onkey.org/active-record-query-interface概述了新的rails 3活动记录查询语法。