[Ror-es] Accediendo a valores de sesión o configuración desde un modelo!
Ariel Fernando Diaz Bermejo
arieldiazbermejo at yahoo.com.ar
Tue Sep 12 19:41:01 GMT 2006
Hola estimados co-listeros: tengo una duda que no puedo terminar de resolver o mejor dicho, no sé cuál es la manera correcta. En mi aplicación, tengo algunos modelos los cuales necesitan acceder a valores de sesión (o mejor dicho, a valores de configuraciones que son seteados de manera particular para cada usuario que usa la aplicación [de ahí que use session para hacerlo]).
Por ejemplo: en varios de mis modelos, tengo un campo para auditar cuál fue el último usuario que modificó el registro. Entonces, en esos modelos necesito tener algo así como:
def before_update
......
self.last_user_update = session[:user_id]
......
end
Está de más decir que esto no funciona ya que la variable "session" no está disponible dentro del entorno de un modelo. He visto en algunos lugares que la solución para estos casos (y la que he implementado actualmente) es crear una variable de clase en el modelo que queremos auditar y luego con un before_filter en la aplicación, setear esa variable con el valor que desee (particularmente el que tengo en session). Esto quedaría algo así como:
<file: railsapp/app/models/asiento.rb>
class Asiento < ActiveRecord::Base
...
def self.current_user=(user)
@@current_user = user
end
...
def before_update
...
self.last_user_update = @@curent_user
...
end
end
<file: railsapp/app/controllers/application.rb>
class ApplicationController < ActionController::Base
before_filter :set_current_user
...
...
private
def set_current_user
Asiento.current_user = session[:user_id] || nil
end
....
end
De esta forma queda solucionado y me anda; pero no creo que sea la mejor forma ya que tengo que definir una variable de clase con su método "set_" en cada modelo que lo necesite y definir tantos filtros como sean necesarios para setear dichas variables de configuración. ¿Cómo les parece qué se resuelven estos casos?
Otro ejemplo similar que tengo en mi aplicación sería el caso de que para contabilizar los movimientos (modelo Asiento) uso una fecha contable que puede ser la fecha actual (Time.now) o una fecha_contable definida por el usuario que está usando la aplicación. Entonces, del mismo modo que más arriba tengo:
<file: railsapp/app/models/asiento.rb>
class Asiento < ActiveRecord::Base
...
def self.fecha_contable=(fecha)
@@fecha_contable = fecha
end
...
def before_create
...
self.fecha = @@fecha_contable
...
end
end
y,
<file: railsapp/app/controllers/application.rb>
class ContableController < ActionController::Base
before_filter :set_fecha_contable
...
...
private
def set_fecha_contable
Asiento.fecha_contable = session[:fecha_contable] || Time.now
end
....
end
Perdón por lo extenso del mail y espero me hayan entendido.
Saludos,
--------------------------------------------------------
Ariel Diaz Bermejo
Analista en Cs.de la Computación
Universidad Nacional de Rio Cuarto
---------------------------------
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
Probalo ya!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20060912/82620d77/attachment.htm
More information about the Ror-es
mailing list