我有这个:
class Attendance < ActiveRecord::Base
has_and_belongs_to_many :shirts,
join_table: "attendances_shirts",
association_foreign_key: "shirt_id", foreign_key: "attendance_id"
# I'd like to be able to write this scope, specifying
# only the attendances that have shirt records
scope :with_shirts, ??????
end
我有一些加入的例子,在哪里,但我没有发现它们非常直接。
同样,我希望帮助选择出勤率至少有一件衬衫记录的人数。
答案 0 :(得分:0)
很遗憾,如果没有加入,你就无法做到这一点。范围是返回关联对象,因此所有“计算”都需要在db内执行。 db能够确定哪些出席有衬衫的唯一方法是进行加入。
scope :with_shirts, select("#{table_name}.*").joins(:shirts).group(:id)
更新:
要处理返回哈希的计数,你可能会这样做:
scope :with_shirts, select("#{table_name}.*").joins(:shirts).group(:id).extending do
def count
super.length
end
end