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