Я обнаружил, что с помощью 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, я удивляюсь, потому что ожидаю, что оно даст такой же результат.