2011-10-28 8 views
6

Problema: para evitar la creación de múltiples objetos o consultas múltiples cuando sea posible.Usando presentadores de rieles - memorable quedando obsoleto en 3.1 - use || = en su lugar?

Estoy utilizando Presenters with rails como Best Practice.

Estoy siguiendo consejos que dicen que sería bueno utilizar "extender ActiveSupport.Memoizable" (y luego memoize: método (s) para usarlos) sobre la configuración de elementos con el estilo @the_record = record ||= @record debido a un par de problemas - falso o nulo no se almacena para que la consulta se vuelva a llamar y también que el memorable use mejor el caché (es decir, ¡lo use!).

Sin embargo veo que memoizable está consiguiendo en desuso en los carriles de 3.1 Notas i Github bajo carrierwave y con la declaración: "Deprecation ADVERTENCIA: ActiveSupport :: Memoizable es obsoleto y se eliminará en futuras versiones, sólo tiene que utilizar el patrón memoization Rubí vez . (llamada de extenderse por lo /Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/gems/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb:284" .

Tal vez ha sido Sin embargo, ¿alguien lo resolvió?

¿Alguna sugerencia sobre la mejor práctica para seguir adelante? ¿Utiliza la sintaxis || = ¿Qué pasa con los problemas anteriores?

enter image description here

Respuesta

7

||= El método es ideal para las cosas que devuelven valores que evalúan como verdadero, pero no funciona muy bien para las cosas que no lo hacen. memoize soluciona esto atrapando estas condiciones y volviendo en consecuencia. Es posible que tome un enfoque de este tipo si desea dar cabida a nil:

def some_method 
    return @some_method if (instance_variable_defined?(:"@some_method")) 

    @some_method = begin 
    ... 
    end 
end 

Esto se comprueba si la variable está definida, no si está puesto, el cual es una distinción importante en su caso.

No estoy seguro de por qué crees que está siendo desaprobado [Nota de Michael, está en desuso en 3.2, ver nota a continuación]. El documentation indica que todavía está actualizado en 3.1. A veces, las implementaciones se marcan como "en desuso" cuando se trasladan de un módulo a otro, pero la instalación permanece disponible.

+0

Bueno, miré a mi alrededor y tal vez una implementación anterior estaba en desuso. De todos modos voy a ir con Memoizable ahora sé que puedo confiar en él en 3.1 Thx tadman! –

+1

Espera, encontré la advertencia, está en el excelente curso sobre presentadores y memoial. Son conocidos como el curso 'Rails for Zombies'. De todos modos, dieron la información sobre la memorización, dijeron que las opciones de ActiveSupport eran las mejores y, sin embargo, su verdadero desafío de código dice "ActiveSupport :: Memoizable (nota: ActiveSupport :: Memoizable está en desuso en Rails 3.1)". así que todavía no estoy seguro de eso y si se queda obsoleto es porque los problemas anteriores se resolverán, etc. –

+3

Obsoleto a partir de 3.2: http://guides.rubyonrails.org/3_2_release_notes.html#activesupport_deprecations – m33lky

Cuestiones relacionadas