Получить все записи модели, связанные с набором записей другой модели

#ruby-on-rails #ruby-on-rails-4 #rails-activerecord

#ruby-on-rails #ruby-on-rails-4 #rails-activerecord

Вопрос:

Я хочу получить коллекцию «сообщений», которые были сделаны за прошедший день, и получить все электронные письма их автора.

An author has_many posts .

Шаг 1: получить все записи, созданные сегодня (работает)

 Posts.where('created_at > :today', today: Time.zone.now.beginning_of_day)
 

Шаг 2: Получить всех авторов для этих сообщений (каков синтаксис для этого?)

 Posts.where('created_at > :today', today: Time.zone.now.beginning_of_day).authors??? # Returns undefined method for ActiveRecord_Relation.
 

Ответ №1:

Таким образом, вы можете получить массив электронных писем:

 Posts.where('created_at > :today', today: Time.zone.now.beginning_of_day).joins(:author).pluck("authors.email")
 

Если вам нужно ActiveRecord::Relation , вы должны начать свой запрос с класса, который вы хотите получить

 Author.joins(:posts).where("posts.created_at > :today", today: Time.zone.now.beginning_of_day)
 

Ответ №2:

Нетерпеливый автор загрузки

 Posts.includes(:author).where('created_at > :today', today: Time.zone.now.beginning_of_day).collect(amp;:author)