タグとタスクのタグ付けシステムがあります (タグには 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 モデル内にスコープを作成する連鎖可能な方法が思いつかないことです。経由でタグモデルにパームオフする
def self.in_all_tags(tags_ids)
tags = Tag.combined_tasks(tag_ids)
end
動作しますが、当然のことながら、他のスコープにチェーン可能ではないようです。
任意の提案をいただければ幸いです