2014-10-03 2 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 

Теперь, если у меня есть экземпляр Foo (е), и я f.bars, я получаю экземпляр ActiveRecord :: Отношение, как ожидалось. По какой-то причине, хотя, когда я делаю f.bars.active, я получаю неопределенный метод active для объекта отношения (я куплю это, поскольку область действия находится на классе Bar). Однако я могу сделать f.bars.where(:active=>true). Я думаю, мои вопросы:

  1. Что происходит под капотом здесь?
  2. Как я могу использовать активную область для достижения желаемого результата?
+0

Приведенный выше пример работает. Моя ситуация была в моем классе, в ней была ошибка (без малейшего сбоя), обнаруженная только тогда, когда я сделал Bar.active. – psulightning

ответ

2

Вы должны обернуть заявления в области видимости лямбда, прежде чем он будет работать правильно:

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

Я принимаю это, потому что синтаксически это правильно для исходного ответа. – psulightning

Смежные вопросы