Sai*_*aim 8 session model ruby-on-rails
我正在使用它来访问Model中的会话.
http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/
任何人都可以确认它也适用于Apache + Passenger部署吗?
或者,如果有任何其他替代方案可以实现相同的目标?
谢谢,
伊姆兰
ibl*_*lue 25
我没有在互联网上找到任何有效的代码,所以我做了一些研究并写了自己的代码.它适用于Rails 3.2.x,也可能适用于其他一些版本.
将其插入您的 ApplicationController
# Set a filter that is invoked on every request
before_filter :_set_current_session
protected
def _set_current_session
# Define an accessor. The session is always in the current controller
# instance in @_request.session. So we need a way to access this in
# our model
accessor = instance_variable_get(:@_request)
# This defines a method session in ActiveRecord::Base. If your model
# inherits from another Base Class (when using MongoMapper or similar),
# insert the class here.
ActiveRecord::Base.send(:define_method, "session", proc {accessor.session})
end
Run Code Online (Sandbox Code Playgroud)
我不会提醒您从模型访问会话可能会导致代码错误.其他帖子可能会告诉你,你是愚蠢的.虽然从模型中访问会话有一些正当理由,例如实现Model.save
方法,但会保存到当前用户会话.
是的。这是我发现在模型中使用会话数据的唯一有效方法。我也使用过它,并且从未遇到过 Apache + Passenger 的任何部署问题。
但您需要确认何时使用会话值。在对服务器的每个新请求中,会话值都会存储在线程中,我们可以在模型中访问它。如果您通过使用线程值来应用任何逻辑,那么还要确保线程值也可能为零的情况。
因为我遇到了一个问题,在开发中,我的每个代码都工作正常,但在生产中,在启动服务器期间,它导致了一个问题,因为最初它认为线程值为零。
归档时间: |
|
查看次数: |
15920 次 |
最近记录: |