[Ror-es] Accediendo a valores de sesión o configuración desde un modelo!
Damian Janowski
damian.janowski at gmail.com
Wed Sep 13 18:34:21 GMT 2006
Hola Ariel,
Lo que querés ya está hecho :)
http://www.delynnberry.com/pages/userstamp/
El plugin no lo trae, pero yo agregué algo para facilitarme la
auditoría, que es usar un acts_as en vez de usar el belongs_to en
todos lados (me parece más DRY). Te lo paso:
-- init.rb
require 'acts_as_userstamped'
ActiveRecord::Base.send(:include, ActiveRecord::Acts::Userstamped)
-- lib/acts_as_userstamped.rb
# ActsAsUserstamped
module ActiveRecord
module Acts #:nodoc:
module Userstamped #:nodoc:
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def acts_as_userstamped(options = {})
belongs_to :created_by, :class_name => 'User', :foreign_key => 'created_by'
belongs_to :updated_by, :class_name => 'User', :foreign_key => 'updated_by'
# include ActiveRecord::Acts::Contactable::InstanceMethods
# extend ActiveRecord::Acts::Contactable::SingletonMethods
end
end
module SingletonMethods
end
module InstanceMethods
end
end
end
end
On 9/12/06, Ariel Fernando Diaz Bermejo <arieldiazbermejo at yahoo.com.ar> wrote:
> 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!
>
>
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
>
--
Damian Janowski
damian.janowski at gmail.com
More information about the Ror-es
mailing list