CanCan: метод 'can' снова выбирает записи, даже если они уже получены - PullRequest
2 голосов
/ 27 января 2011

Я пытаюсь передать такой объект

    <% 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 => { :karma => :changers } для запроса в контроллере).

Добавлено:

У меня есть предположение, что это происходит, потому что карма хранит ссылку на: включение объектов (не самих объектов), которая фактически нарушается, когда я передаю ее методу. Так что сейчас я думаю о сериализации ..

Есть идеи?

1 Ответ

0 голосов
/ 05 февраля 2011

Когда вы выполняете запрос в модели, попробуйте использовать этот синтаксис

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

и посмотрите, сохраняется ли проблема.

Для справки, http://m.onkey.org/active-record-query-interface имеет краткое изложение синтаксиса запросов новых записей на рельсы 3.

...