Rails 5: используйте .where с двумя атрибутами - PullRequest
0 голосов
/ 04 мая 2019

Я объединяю два .where так:

@questions = (FirstQuestion.where(user_id: current_user) + SecondQuestion.where(user_id: current_user)).sort_by(&:created_at).reverse

Оба .where поиска имеют один атрибут ... user_id. Но теперь я хочу искать с двумя атрибутами, user_id и этим created_at >= ?", Date.today + 60.days. Поэтому в основном я хочу найти объект с user_id: current_user и объекты, которые были созданы менее или равны 60 дням.

Есть идеи, как это реализовать?

1 Ответ

2 голосов
/ 04 мая 2019

Пожалуйста, смотрите мой комментарий также ... потому что это своего рода запах кода, когда у вас есть названия моделей FirstQuestion, SecondQuestion.Там действительно нет причин иметь отдельные модели.Вы, вероятно, могли бы легко смоделировать логику с помощью атрибута question_depth или чего-то еще (я не знаю, чего именно вы пытаетесь достичь).

Что касается вашего вопроса: ActiveRecord - довольно хороший класс, которыйпозволяет очень настраиваемые запросы.В вашем случае вы можете легко записать оба условия в отдельном where или создать одно where.Это полностью зависит от вас:

Question.where(user: current_user).where('created_at <= ?', 60.days.from_now)

Или в одном, где

Question.where('user_id = ? AND created_at <= ?', current_user.id, 60.days.from_now)

Кроме того, рассмотрите возможность использования областей в вашей модели Вопроса для удобства чтения и повторного использования:

class Question < AppModel
   scope :by_user, -> (user) { where(user: user) }
   scope :min_age, -> (date) { where('created_at <= ?', date) }
end

И используйте это как:

Question.by_user(current_user).min_age(60.days.from_now)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...