Luchando por entender cómo funciona este bloque

Estoy mirando fábricas en rieles y he encontrado un problema en mi comprensión de este código:

Factory.define :user do |f|
  f.username "foo"
  f.password "foobar"
  f.password_confirmation { |u| u.password }
end

Entiendo la mecánica de todo excepto

f.password_confirmation { |u| u.password }

¿Cómo sabría esto para asignar "foobar" a f.password_confirmation en el caso de que usé "foobar" como contraseña personalizada? O en otras palabras, ¿a qué se refiere 'u'? Gracias por adelantado.

preguntado el 02 de mayo de 12 a las 19:05

1 Respuestas

La "u" en ese caso en realidad representa una clase "Evaluador", que es un proxy interno utilizado por factory_girl. Es una clase definida dinámicamente que responde a métodos para los atributos que está definiendo en su fábrica.

El Evaluador le permite acceder a valores de atributos definidos previamente y generará, almacenará en caché y devolverá el valor correcto si los atributos están desordenados. Por ejemplo, cambiar el orden de "contraseña" y "contraseña_confirmación" seguirá funcionando debido a la forma en que funciona el Evaluador.

Puedes ver cómo funciona el Evaluador aquí: https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb

En su mayoría, no necesita preocuparse por el Evaluador al definir fábricas. En general, puede "u" allí como si fuera una instancia de un Usuario, porque delegará los métodos faltantes a la instancia que está construyendo.

contestado el 02 de mayo de 12 a las 21:05

Eliminando mi respuesta porque esto es mucho más completo: DVG

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.