No encontré ningún código en Internet que funciona, así que investigué un poco y escribí el mío. Funciona para Rails 3.2.x y probablemente en algunas otras versiones.
Insertar esto en su 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
No voy a recordar que el acceso a la sesión de un modelo puede conducir a mal código. Other posts may tell you, that you are stupid. Aunque hay algunas razones válidas para acceder a la sesión desde su modelo, como implementar un método Model.save
, eso se guarda en la sesión actual de los usuarios.
Gracias Nimsesh. Aquí está el escenario donde necesito acceder a la sesión en Modelo: 1. En ActiveRecord Observer para actualizar un campo - con un valor de sesión - para cada registro. 2. estableciendo un campo de current_user (restful_authentication). ¿Todos los usuarios tendrán el diferente valor que se establece en el inicio de sesión? – Saim
Sí. Solo mira de nuevo aquí http: //www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/... Tiene 'before_filter: set_user 'que guarda el valor de la sesión en cada nueva solicitud para enhebrar. Eso significa que cada usuario tiene un valor diferente porque la solicitud de todos es diferente y de esa manera el hilo se mantiene actualizando con diferentes valores –