Я не нашел ни одного кода в интернете, который бы работал, поэтому я провел небольшое исследование и написал свой собственный.Это работает для 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
Я не буду напоминать вам, что доступ к вашей сессии из модели может привестина плохой код. Другие посты могут сказать вам, что вы глупы .Хотя есть некоторые веские причины для доступа к сеансу из вашей модели, например, для реализации метода Model.save
, который сохраняет текущий сеанс пользователя.