使用范围和关联在Rails 3中保持DRY

时间:2011-07-19 04:53:16

标签: ruby-on-rails ruby-on-rails-3 scope associations arel

以下是相关事实:

  1. 每个topic has_many comments

  2. Comment模型有一个名为scope的{​​{1}},我们假装将其与多个列进行比较。

    very_popular
  3. def self.very_popular # lots of cool stuff end 模型的Topic名为scope,其中包含exciting topics very_popular的所有comments

  4. 3号是我被困的地方。以下结果导致缺少方法异常,并且听起来很可怜​​,我不知道还有什么可以尝试!

    def self.exciting
      join(:comments).very_popular
    end
    

    如何重新使用very_popular模型范围内Comment模型的Topic范围?

1 个答案:

答案 0 :(得分:6)

您不能直接使用其他模型的范围。你可以做的是合并查询。 Topic.joins(:comments).merge(Comment.very_popular)

Ryan在这里解释得非常漂亮:http://railscasts.com/episodes/215-advanced-queries-in-rails-3