Rails, где условие со значением nil

Я обнаружил, что с помощью where с символом: my_id => nil и с помощью старой школы с? это отличается. Может ли кто-нибудь объяснить мне, почему?

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

Не получает никаких данных

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

Получить данные, для которых my_id имеет значение null.

Что лучше всего использовать в рельсах?

Я думаю, что не разъяснил мой вопрос. В моем приложении rails параметр запроса равен нулю. Существующая кодировка - MyTable.where (: my_id => params [: id]). First В таблице есть много записей, у которых my_id имеет значение null. Таким образом, первая запись из таблицы берется без ведома. Прежде всего, да, это проблема с нечистыми данными в таблице.

Решить эту проблему. Я нашел два решения

Решение 1

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

Решение 2

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

Как вы знаете, если мы поставим (если условие все больше и больше), наше приложение будет работать медленнее, и это не будет функциональным программированием. Когда я пробую решение 2, я удивляюсь, потому что ожидаю, что оно даст такой же результат.

24
задан Swe 13 July 2011 в 14:21
поделиться