我有一个标签和任务的标签系统(标签通过 TagTask 有很多任务,反之亦然)
我想做的是创建一个范围,返回所有标签中提供的所有任务。因此,在 Tag 模型中,它看起来像这样:
def self.combined_tasks(tag_ids)
tasks = []
tag_ids.each do |tag_id|
tasks << self.find(tag_id).tasks
end
tasks.inject { |result, elem| result & elem }
end
困难在于,我想不出任何可链接的方式来在 Task 模型中创建一个范围来有效地做到这一点。通过以下方式将其转交给 Tag 模型
def self.in_all_tags(tags_ids)
tags = Tag.combined_tasks(tag_ids)
end
有效,但可以理解的是,它似乎不能链接到其他范围。
任何建议表示赞赏