2

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

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

在我的ability.rb中,我有以下内容:

    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 }控制器中的查询选项)。

添加:

我猜测它正在发生,因为 karma 正在存储指向 :include 对象(而不是对象本身)的链接,当我将它传递给方法时,它实际上被破坏了。所以我现在正在考虑序列化..

有任何想法吗?

4

1 回答 1

0

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

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

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

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

于 2011-02-05T11:31:30.217 回答