У меня есть модель проекта ж/это ассоциация с описанием членов команды, которые приняли (статус)Как пересечь две ассоциации в isl?
Class Project < ActiveRecord::Base
has_many :participants, :through => :team_members, :source => :user, :conditions => ['team_members.status = ?', TeamMember::STATUS[:accept]]
У меня есть модель деятельности, которая имеет участник также
Class Activity < ActiveRecord::Base
belongs_to :project
has_many :participants, :through => :collaborations, :source => :user
деятельности участник, которые могут включать в себя команду членов, которые еще не приняли. Итак, я хочу пересечение этих двух ассоциаций. Моя цель состоит в том, чтобы сделать 1 запрос, а не повторять sql ассоциации и вырвать один столбец. Я нашел Intersect описанный здесь http://www.rubydoc.info/github/rails/arel/Arel/SelectManager#intersect-instance_method и пытался сделать вывод о его использовании с https://github.com/rails/arel/commit/74caeaad157e79853b9c6804f561d3c70eea2346. Но мне не повезло.
Лучшее, что я получил до сих пор является:
a = Activity.find(1)
team = a.project.participants.select('user_id').to_sql
peeps = a.participants.where("user_id in (#{team})")
peeps.pluck('thecolumn')
Это один запрос (хороший), не повторяет логику ассоциации (хорошего) и не нагружает вверх все AR объектов, поскольку я сразу после одного значения (хорошего). Тем не менее, я надеялся, чтобы быть в состоянии:
a = Activity.find(1)
peeps = a.project.particpants.intersect a.project.participants
, который работает, но возвращает AREL :: Вершины :: Intersect ... не знаю, как захватить результаты этого.
Любой удачи с этим? –
нет, все еще используя .to_sql:/ –
См. Мой вопрос и как я заработал это сейчас: http://stackoverflow.com/questions/24320469/how-to-write-activerecord-arel-intersection-query/24323622 # 24323622 –