问题模型访问CURRENT_USER
问题描述:
有很多关于这个问题的问题,“如何访问CURRENT_USER模型”,我尝试了一些,并最终做了“老办法”,设置问题模型访问CURRENT_USER
cattr_accessor :current_user
在
我FeedObserver,并设置
FeedObserver.current_user = current_user
在我ApplicationController中用的before_filter。
不幸的是,它似乎没有按预期工作,有时在FeedObserver中使用了不同的用户。
我使用rails 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
答
不知道是什么原因造成的错误,我想这只是它覆盖了变量的并发请求。作为@Andrei建议我尝试了sentient_user gem。但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
修复该线程泄漏问题...
是的,我检查了代码,并使用了“线程方法”。这很好,但我需要知道为什么我的代码不工作,也许这种方法会发生同样的问题。 (也需要设置更多,然后只是current_user) – fluxsaas 2012-03-15 20:03:02