2015-02-07 2 views
1

Я пытаюсь собрать запрос ActiveRecord, который будет возвращать любой идентификатор пользователя, где связанные записи модели были обновлены в определенном диапазоне.Как получить user_id, где любая ассоциация updated_at находится в пределах диапазона?

Так, например, User has_many :searches и has_many :lists. Я хочу сделать что-то вроде этого:

user_ids = [1,2,3,4] 
search_users = Search.where(user_id: user_ids).where("updated_at > ?", 7.days.ago).pluck(:user_id) 
list_users = List.where(user_id: user_ids).where("updated_at > ?", 7.days.ago).pluck(:user_id) 
ids_i_care_about = (list_users + search_users).uniq 

Так через несколько моделей, мне нужно, чтобы получить user_ids, которые updated_at в моем диапазоне для любой из моделей. (Временной интервал должен удовлетворять хотя бы 1 обновленной версии модели). Я делаю это примерно для примерно 12 моделей, каждый из которых имеет user_id.

Каков наилучший способ сделать это в ActiveRecord?

ответ

0

Вы можете использовать драгоценный камень search-logic для написания подобных запросов.

User.searches_updated_at_eq(start_date..end_date).lists_updated_at_eq(start_date..end_date).map(&:id) 

Надеюсь, это ответили на ваш вопрос.

Смежные вопросы