ruby-on-rails - inner - rails find
¿La mejor forma de encontrar un solo registro usando ActiveRecord 3/Arel? (4)
Donde solía hacer esto:
Foo.find_by_bar(''a-value'')
Ahora puedo hacer esto:
Foo.where(:bar => ''a-value'').limit(1).first
¿Esto es recomendado? Es esta la mejor manera? ¿Debo continuar usando el método "antiguo" porque sigue siendo azúcar sintáctica útil, o hay una forma aún mejor de hacerlo ahora, que apoyará el encadenamiento y todas las otras cosas buenas?
Creo que la forma preferible de devolver un solo registro sería según su segundo ejemplo, pero puede omitir la parte límite:
Foo.where(:bar => ''a-value'').first
Esto sigue la nueva sintaxis y admite el encadenamiento si desea agregar más condiciones a la búsqueda.
Otra alternativa:
Foo.find(:first, conditions: { bar: ''a-value'' })
También puedes usar múltiples atributos:
Foo.find(:first, conditions: { bar: ''a-value'' , wibble: ''a wibble value'' })
Rails 4:
Foo.find_by bar: ''a_value'' , wibble: ''a wibble value''
Rails te da una gran cantidad de métodos mágicos para este tipo de cosas:
Foo.find_by_bar(''a-value'')
También puedes usar múltiples atributos:
Foo.find_by_bar_and_wibble(''a foo value'', ''a wibble value'')
¡Y agregando a! hace que arroje un RecordNotFound si no se encuentra nada:
Foo.find_by_bar!(''a-value'')