sql - rails - rieles-encuentra con la condición en rieles 4
raw query ruby on rails (3)
El método de find
está en desuso en esta versión de Rails (ver la referencia ). En cambio, debes usar el método where
.
En su caso, debe escribir @user = User(:name => ''batman'')
o @user = User(name: ''batman'')
Recientemente actualicé mis rieles a Rails 4.1.6.
Esta consulta solía funcionar:
@user = User.find(:all, :conditions => { :name => ''batman'' })
Ahora recibo este mensaje de error:
Couldn''t find all Users with ''id'': (all, {:conditions=>{:name=>"batman"}}) (found 0 results, but was looking for 2)
Cuando reviso los registros, puedo ver que Rails está tratando de hacer una consulta completamente diferente:
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (''all'', ''---
:conditions:
:name: batman
'')
Parece que está tratando de obtener todos los usuarios con el id. "Todos" y "{: condiciones => {: nombre =>" batman "}}". Por favor ayuda.
ACTUALIZAR:
Mi verdadera pregunta detrás de eso era que quiero obtener un usuario específico y agregarle sus autos, solo los autos que son azules. Por ejemplo, esta es mi consulta, la identificación del usuario es 20.
@user = User.joins(:cars).find(20, :cars => {:color => "blue"})
Pero me sale este error:
No se pudieron encontrar todos los usuarios con ''id'': (20, {: cars => {: color => "blue"}}) (encontrados 41 resultados, pero estaban buscando 2)
Algunos otros ya lo señalaron: la sintaxis de la consulta ha cambiado. Prueba esto:
@user = User.joins(:cars).where(:cars => { :color => "blue" }).find(20)
Tenga en cuenta que esto generará una excepción si no se encuentra ese registro, para devolver una matriz vacía llame a:
@user = User.joins(:cars).where(:id => 20, :cars => { :color => "blue" })
Sugiero leer: http://guides.rubyonrails.org/active_record_querying.html
Si quieres cargar al usuario incluso si no tiene ningún automóvil y solo muestra sus autos azules, lo haría así:
@user = User.find(20) # returns the user
@user.cars.where(:color => ''blue'') # returns the user''s blue cars (or an empty array)
Definitivamente, debería leer esta interfaz de consulta ActiveRecord quide
User.where(name: "batman")