raw rails query plain left joins includes active sql ruby-on-rails ruby find condition

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)