Rails donde condición con valor nulo

Descubrí que usando where con el símbolo: my_id => nil y usando old school one with? 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 tengan my_id es nulo.

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

Creo que no dejé en claro mi pregunta. En mi aplicación rails, el parámetro de solicitud es nil. La codificación existente es MyTable.where (: my_id => params [: id]). First En la tabla, hay muchos registros que tienen my_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

Solution 1

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

Solution 2

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

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta