проблемы с доступом к current_user в модели - PullRequest
0 голосов
/ 15 марта 2012

Есть много вопросов относительно этой проблемы, «как получить доступ к current_user в модели», я попробовал некоторые из них и в итоге сделал «старый способ», установив

 cattr_accessor :current_user

в моем FeedObserver и установите

FeedObserver.current_user = current_user

в моем ApplicationController с before_filter.

К сожалению, похоже, что он не работает должным образом, и иногда в FeedObserver используется другой пользователь.

Я использую рельсы 3.2.2, ruby ​​1.9.3p0, nginx,единорог.Я не могу объяснить это поведение, потому что before_filter должен устанавливать current_user для каждого запроса и не должен перезаписываться другим пользователем ...?

class FeedObserver < ActiveRecord::Observer
  cattr_accessor :current_user
  observe :account, :user

  def after_create(ressource)
    log!(ressource)
  end

  def log!(ressource, event_name)
    feed_item = FeedItem.new(
      user: current_user,
      data: ressource.changes,
      account_id: current_user.account.id
    )
    feed_item.save if feed_item.valid?
  end
end

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

не уверен, что вызвало ошибку, я думаю, это был только параллельный запрос, который перезаписал переменные.как предложил @Andrei, я попробовал самоцвет sentient_user.но у sentient_user есть та же проблема, которую можно решить с помощью:

  module SentientController
    def self.included(base)
      base.class_eval {
        around_filter do |controller, action|
          User.current = controller.send(:current_user)
          begin
            action.call
          ensure
            User.current = nil
          end      
        end
      }
    end
  end

, которая устраняет проблему утечки потока ...

0 голосов
/ 15 марта 2012

Я рекомендую sentient_user камень для вашей цели

...