У меня есть такой поиск в Rails 3:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
Но мне нужно, чтобы :date => p[:date]
условие было эквивалентным :date > p[:date]
. Как я могу это сделать? Спасибо за прочтение.
where()
. Использованиеwhere()
автоматически экранирует ввод.where()
автоматически экранирует ввод, когда он используется в формате, показанном выше, с вопросительными знаками вместо переменных, которые впоследствии будут перечислены в вызове функции. НЕNote.where("date > #{p[:date]}")
where("user_id = ?",current_user.id)
более рискованно, чемwhere(user_id: current_user.id)
в тех случаях, когда вы объединяете модели, у которых естьuser_id
поля. Использование сырья SQL нотацию средства, необходимые для включения таблицы уточнений самостоятельно, например:where("notes.user_id = ?",current_user.id)
.Если вы столкнулись с проблемами, когда имена столбцов неоднозначны, вы можете сделать:
источник
Вы можете попробовать использовать:
эквивалент в sql
Результат:
И я тоже изменился
Для
источник
В Rails 6.1 добавлен новый «синтаксис» для операторов сравнения в
where
условиях, например:Итак, ваш запрос можно переписать следующим образом:
Вот ссылка на PR, где можно найти больше примеров.
источник