rails present not nil method empty blank ruby-on-rails null

ruby on rails - present - Rieles donde condición con valor nulo



ruby empty method (4)

La sintaxis correcta de SQL es my_id IS NULL , así que si cambias tu primer fragmento al siguiente funcionará:

MyTable.where("my_id IS ?", nil).first

Ambas sintaxis están perfectamente bien. Depende de tu propia preferencia. Sin embargo, si se trata de un parámetro y usted no sabe si será nil o no, será mejor que use:

MyTable.where(:my_id => parameter).first

Descubrí que usar where con symbol: my_id => nil y usar old school one con? es diferente. ¿Alguien podría explicarme por qué?

MyTable.where("my_id = ? ", nil).first SELECT `my_tables`.* FROM `my_tables` WHERE (my_id = NULL ) LIMIT 1

No obtiene ningún dato

MyTable.where(:my_id => nil).first SELECT `my_tables`.* FROM `my_tables` WHERE (`my_tables`.`my_id` IS NULL) LIMIT 1

Obtener datos que tienen my_id es nulo.

¿Cuál es la mejor práctica para usar en rieles?

Creo que no dejé claro mi pregunta. En mi aplicación de rieles, el parámetro de solicitud es nulo. La codificación existente es MyTable.where (: my_id => params [: id]). First En la tabla, hay muchos registros que tienen mi_id es nulo. Por lo tanto, el primer registro de la tabla es recoger sin darse cuenta. En primer lugar, sí, es el problema con los datos sucios en la tabla.

Para resolver este problema. Encuentro dos soluciones

Solución 1

if params[:id].present? MyTable.where(:my_id => params[:id]).first end

Solución 2

MyTable.where("my_id = ? ", nil).first

Como saben, si ponemos (si la condición es más y más), nuestra aplicación será más lenta y no será la programación funcional. Cuando intento la solución 2, me sorprende porque espero que dé el mismo resultado.


Para DB para NULL la sintaxis debe ser

my_id IS NULL

Entonces puedes darlo como:

MyTable.where("my_id is NULL ").first


Supongo que se llama "magia de rieles", puedes pasar rangos

Client.where(:created_at => (Time.now.midnight - 1.day)..Time.now.midnight)

se convierte

SELECT * FROM clients WHERE (clients.created_at BETWEEN ''2008-12-21 00:00:00'' AND ''2008-12-22 00:00:00'')

o si pasas un subconjunto

Client.where(:orders_count => [1,3,5])

los carriles lo harán

SELECT * FROM clients WHERE (clients.orders_count IN (1,3,5))

Más


En rails 4 puede especificar el valor como null usando la nueva sintaxis hash.

MyTable.where(my_id: nil).first