Можно ли с нетерпением загрузить ассоциацию, у которой есть расширение, принимающее параметр? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть модель с ассоциацией: has_many,: through.

К сожалению, в таблице соединений есть условие, которое мне нужно использовать для фильтрации результатов ассоциации.

Я добился этого с помощью расширений ассоциаций, чтобы ограничить таблицу соединения условием,

Мой конечный результат выглядит примерно так:


class Users < ActiveRecord::Base
  has_many :user_meetings
  has_many :meetings, :through => :user_meetings do
   def with_status(status)
     where("user_meetings.status = ?", status)
   end
  end
end

class Meetings < ActiveRecord::Base
  has_many :user_meetings
  has_many :users, :through => :user_meetings do
   def with_status(status)
     where("user_meetings.status = ?", status)
   end
  end
end

class UserMeetings < ActiveRecord::Base
  belongs_to :user
  belongs_to :meeting
end

Конечный результат этого весьма полезен, теперь я могу использовать такие запросы, как

Users.find(1).meetings.with_status('hidden')
Meetings.find(1).users.with_status('host') 

, чтобы найти правильные записи на основе значения, хранящегося в таблице соединения UserMeetings.

Мой вопрос: можно ли загружать эти условные ассоциации?

IE, могу ли я объединить эту функцию с .includes ()?

Для иллюстрации, мое идеальное использование было бы что-то вроде

users = Users.where({ status: 'active').includes(meetings: { with_status => 'host' })

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

Я знаю, что могу использовать ActiveRecord::Associations::Preloader для выполнения sh чего-то подобного императивно, но мне просто было интересно, не хватало ли мне более простого выражения, которое можно использовать с более распространенным синтаксисом нетерпеливой загрузки?

...