用于查找子项的rails范围计数在has_many中

时间:2014-12-16 08:39:41

标签: sql ruby-on-rails ruby

在我的Ruby on Rails应用程序中,我有两个模型:

class CuratorGroup < ActiveRecord::Base
  has_and_belongs_to_many :art_objects, join_table: "curator_groups_art_objects"
end

class ArtObject < ActiveRecord::Base
  scope :currently_displayed, -> { where(status: "Currently On Display") }
  has_and_belongs_to_many :curator_groups, join_table: "curator_groups_art_objects"
end

不,我想写一个范围,让我回复所有至少有一个艺术品对象的策展人群体? 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这应该有效。在我自己的项目中尝试过类似的关联。我希望我在没有错别字的情况下将它翻译成你的项目。

CuratorGroup.joins('LEFT OUTER JOIN curator_groups_art_objects ON curator_groups_art_objects.curator_group_id = curator_groups.id').group('curator_groups.id').having('count(curator_groups_art_objects.curator_group_id) > 0').all

答案 1 :(得分:0)

试试这个:

scope :has_art, -> { :includes => :art_objects, :conditions => { "curator_groups_art_objects.art_object_id != nil"} }