2014-10-03 85 views
2

使用Rails 3.2/Ruby 1.9的,比如我有以下类:ActiveRecord的关系与范围

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 

现在,如果我有美孚(F)的实例,而我呢f.bars,我得到一个实例的ActiveRecord ::关系如预期。由于某种原因,虽然当我做f.bars.active时,我得到了未定义的方法active关系对象(我会购买这个作为范围在Bar类)。虽然我可以做f.bars.where(:active=>true)没问题。我想我的问题是:

  1. 这里发生了什么?
  2. 如何使用活动范围来达到所需的结果?
+0

上面的例子做的工作。我的情况是我的班级有一个错误(默默失败),只有当我做Bar.active时才发现。 – psulightning 2014-10-08 15:22:25

回答

2

,必须用范围陈述在拉姆达前,将正常工作:

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

我接受这个,因为在句法上这是原始答案的正确答案。 – psulightning 2014-10-08 15:22:53