2009/9/30 NachoKB <[email protected]>: > 2009/9/29 Nicolás Sanguinetti <[email protected]>: >> La 1 es la 2 con un sheep coat. Es básicamente una variable global, >> escondida en un método. Es un poco más prolija porque es thread safe, >> pero no deja de ser una variable global. > > No estoy tan de acuerdo con que sean lo mismo. Llevado a un extremo, > toda clase no deja de ser una constante global entonces. > > User.current tiene varias ventajas frente a $current_user: (1) lazy > loading, (2) está encapsulado en User en lugar de polucionar un > namespace global, (3) como bien decís, es thread safe. > > El punto (2) es más que importante: $current_user está expuesto a > cualquier modificación por parte de cualquier fucking línea de código > desde cualquier lado (imaginate si de alguna manera lográs inyectarle > código a algún eval dando vueltas -- si no me equivoco el acceso a > Thread puede limitarse desde código no seguro). User.current no es un > writer, y si existe User.current= es fácil hacer que realice > chequeos... > > El caso sigue siendo, que si bien es buenísimo que se pueda evitar, > hay veces que es necesario conocer algo así de contexto desde un model > (en mi caso, tenía un logger que guardaba el id del user actual, y no > quería pasar por parámetro el usuario cada vez que hacía cualquier > cosa).
around_filter :logger_with_user def logger_with_user old_logger = Rails.logger Rails.logger = LoggerWithUser.new(current_user) yield Rails.logger = old_logger end o algo asi, y LoggerWithUser < Logger, y ta. No se, esto es off the top of my head, capaz que hay alguna solucion más prolija. Pero de nuevo, no necesitás acceder a la sesión desde el modelo. Ahora me vas a querer justificar que desde el modelo querés acceder a los cookies, o peor, setear flash messages! y ahí nos agarramos a las piñas, eh! :P -foca > Pero, tá, tu respuesta me pareció horrible... > > -- nachokb > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
