Задать вопрос

Как использовать логические операторы в запросах where в rails?

Продолжение вопроса Как вытащить пост с комментариями по определенной дате? :
Как в подобном запросе:
@posts = Post.where(user_id:123).includes(:comments).where(comments: { created_at: Time.zone.today...Time.zone.tomorrow })
, добавить аналогичное условие, но по другому полю с использованием логических операторов?
Т.е. чтобы получилось нечто похожее на(не работает):
@posts = Post.where(user_id:123).includes(:comments).where(comments: { created_at: Time.zone.today...Time.zone.tomorrow } | comments: { created_at: Time.zone.today...Time.zone.tomorrow })
  • Вопрос задан
  • 274 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
Что-то в таком духе.

@posts = Post.where(user_id:123).includes(:comments).where("comments.created_at IN (?) OR comments.updated_at IN (?)", Time.zone.today...Time.zone.tomorrow, Time.zone.today...Time.zone.tomorrow)


Нативная возможность использовать логический оператор OR в ActiveRecord существует в Rails 5.

https://github.com/rails/rails/pull/16052
https://github.com/rails/rails/blob/aa3acf85cb/act...

Post.where(id: 1).or(Post.where(id: 2))
Ответ написан
Комментировать
@chronic86
Ruby on Rails junior
Можете попробовать гем для rails 4

https://github.com/Eric-Guo/where-or
Ответ написан
Комментировать
Hunt666
@Hunt666 Автор вопроса
Карим Кьятлоттьяви Конкретно ваш код в первой части ответа, не работает, но это помогло найти решение. У меня получилось сделать то, что мне нужно так:

date = "2016-06-28"
@posts = Post.where(user_id: 123).includes(:comments).where("(comments.created_at BETWEEN ? AND ?) OR (comments.updated_at BETWEEN ? AND ?)", date, date.next, date ,date.next).references(:comments)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы