rails inner includes active ruby-on-rails ruby activerecord arel

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'')