Как вы делаете запрос or
в Rails 5 ActiveRecord? Кроме того, можно ли связать or
с where
в запросах ActiveRecord?Rails 5: запрос ActiveRecord OR
ответ
Способность цепи or
положение наряду с where
пунктом в ActiveRecord
запроса будет доступен в Rails 5. См. related discussion and the pull request.
Таким образом, вы сможете сделать следующие вещи в Rails 5:
Чтобы получить post
с id
1 или 2:
Post.where('id = 1').or(Post.where('id = 2'))
Некоторые другие примеры:
(A & & B) || C:
Post.where(a).where(b).or(Post.where(c))
(|| B) & & C:
Post.where(a).or(Post.where(b)).where(c)
Как я могу получить (A || B) && (C || D). Я попробовал Post.where (a) .or (Post.where (b)). Где (c) .or (Post.where (d)), но Он производит как: (A || B) && C || D – Imran
@Imran Я считаю, что это будет 'Post.where (a) .or (Post.where (b)). Where (Post.where (c) .or (Post.where (d))), это должно создать (a || b) && (c || d) – engineersmnky
мне нужно сделать (A && B) || (C && D) || (E && F)
Но в текущее состояние Rails 5.1.4
«ы это получить слишком сложно, чтобы достичь с Arel или цепью. Но я все еще хотел использовать Rails для генерации максимально возможного количества запросов.
Так что я сделал небольшой хак:
В моей модели я создал частный метод называется sql_where
:
private
def self.sql_where(*args)
sql = self.unscoped.where(*args).to_sql
match = sql.match(/WHERE\s(.*)$/)
"(#{match[1]})"
end
Следующая в моей компетенции, я создал массив для хранения или в
scope :whatever, -> {
ors = []
ors << sql_where(A, B)
ors << sql_where(C, D)
ors << sql_where(E, F)
# Now just combine the stumps:
where(ors.join(' OR '))
}
Который приведет к ожидаемому результату запроса: SELECT * FROM `models` WHERE ((A AND B) OR (C AND D) OR (E AND F))
.
И теперь я могу легко объединить это с другими областями и т. Д. Без каких-либо противоправных ИЛИ.
Красота, что моя sql_where принимает нормальные аргументы where-where: sql_where(name: 'John', role: 'admin')
сгенерирует (name = 'John' AND role = 'admin')
.
- 1. Rails 5 - запрос ассоциации Activerecord
- 2. Запрос ActiveRecord в Rails
- 3. ActiveRecord Rails запрос эффективно
- 4. Запрос ActiveRecord - Rails
- 5. Rails Активировать запрос Activerecord:
- 6. Rails 5 ActiveRecord Удалить дубликаты
- 7. Rails 5: коллекция ActiveRecord index_by
- 8. Mysql 5.7 json datatype, запрос с activerecord в Rails 5
- 9. Rails has_many через запрос ActiveRecord
- 10. Rails Запрос Activerecord has_many: через
- 11. Rails - условный запрос, с ActiveRecord?
- 12. Rails & ActiveRecord: сложный SQL-запрос
- 13. Rails: как буферировать запрос ActiveRecord?
- 14. SQL запрос к ActiveRecord Rails
- 15. Rails 3 рефакторинг Запрос ActiveRecord
- 16. Rails 5: ActiveRecord не создает запись
- 17. Rails 5 Неудачное тестирование ActiveRecord :: AssociationTypeMismatch
- 18. Rails 5 beta 3 ActiveRecord Record Invalid
- 19. Запрос ActiveRecord OR
- 20. Преобразование SQL-запрос к Rails ActiveRecord запроса
- 21. Rails: запрос ActiveRecord относительно размера ассоциации
- 22. Rails-запрос ActiveRecord для соответствия всем параметрам
- 23. Rails ActiveRecord пересекаются запрос с has_many ассоциации
- 24. Неожиданные результаты для Rails 3 Запрос ActiveRecord
- 25. Rails hStore запрос базы данных postgresql activerecord?
- 26. Rails ActiveRecord запрос для соединения нескольких таблиц
- 27. как преобразовать устаревший запрос ActiveRecord Rails пути
- 28. Rails 4, необработанный запрос с использованием ActiveRecord
- 29. ActiveRecord Запрос связанной модели Rails 3
- 30. Rails 5 ActiveRecord :: SerializationTypeMismatch при создании ресурса через API
[Может быть полезным] (http://stackoverflow.com/q/31096009/3444240) – potashin