ActiveRecord:从另一个模型链接

时间:2012-09-13 18:46:36

标签: ruby-on-rails activerecord

我有一个标签和任务的标记系统(标签通过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

有效,但可以理解的是,它似乎不能链接到其他范围。

任何建议赞赏

1 个答案:

答案 0 :(得分:0)

尝试:

Task.joins(:tag_tasks).where(tag_tasks: {tag_id: tag_ids}).uniq