【问题标题】:CanCan: 'can' method fetch records again, even if they already fetchedCanCan: 'can' 方法再次获取记录,即使它们已经获取
【发布时间】:2011-01-26 21:14:03
【问题描述】:

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

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

在我的能力.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 =&gt; { :karma =&gt; :changers } 选项进行查询)。

添加:

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    @comments = Comment.where(:foo_id =&gt; Bar.id).includes(:karma =&gt; :changers)

    看看问题是否仍然存在。

    作为参考,http://m.onkey.org/active-record-query-interface 对新的 rails 3 活动记录查询语法进行了详细介绍。

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多