Rails中的关联范围?

时间:2014-01-05 00:07:06

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

仍在ARs周围(Rails 3.2)。在我的user.rb模型中,我有这段代码:

  def has_answered
    self.quizzes.where(finished: true).count != 0
  end

在英语中,我想“检查用户是否已回答测验”。

我想将其更改为范围,这是scope :has_answered, includes(:quizzes).where("(finished: true). count > ?", 0)的效果。我得到语法错误。我有几个问题:

  1. 这实际上是否更好(清洁,灵活等)。
  2. 我还能重构这个以使它更干净吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可能最好为用户完成测验的数量实现counter_cache,或者只是为用户模型添加一个布尔字段,例如has_completed_a_quiz

通过这种方式,您可以轻松地将范围添加到用户模型,而无需扫描数据库中可能会成为大型表/慢查询的另一个表。