У меня есть модель с ассоциацией: 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 чего-то подобного императивно, но мне просто было интересно, не хватало ли мне более простого выражения, которое можно использовать с более распространенным синтаксисом нетерпеливой загрузки?