ActiveRecord与范围的关系

时间:2014-10-03 15:36:33

标签: ruby-on-rails activerecord scope

使用Rails 3.2 / Ruby 1.9,例如我有以下类:

class Foo
  has_many :bars
end

class Bar
  scope :active, where(:active=>true)
  # also tried
  # scope :active, lambda{where(:active=>true)}
  # scope :active, -> {where(:active=>true)}
end

现在,如果我有一个Foo(f)的实例,并且我f.bars,我会得到一个ActiveRecord :: Relation的实例。出于某种原因,虽然当我f.bars.active时,我得到了关系对象的未定义方法active(我将在Bar类的范围内购买此方法)。我可以f.bars.where(:active=>true)没问题。我想我的问题是:

  1. 这里发生了什么事?
  2. 如何使用有效范围来达到预期效果?

1 个答案:

答案 0 :(得分:2)

必须先将范围语句包装在lambda中才能正常工作:

scope :active, -> { where(:active=>true) }