[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