Rails 4 - undefined метод `call 'при выполнении простого запроса

Я новичок в Rails, но это кажется довольно простым. У меня есть модель с именем Game, сгенерированная следующим образом:

rails generate model Game name:string year:integer manufacturer:string notes:string is_active:boolean

Я загрузил таблицу с некоторыми данными, и я пытаюсь получить все строки, где is_active есть true. Я бы хотел, чтобы моя модель была чем-то вроде:

class Game < ActiveRecord::Base
  scope :active, where(:is_active => 1)
end

Моя проблема - всякий раз, когда я пытаюсь связать запрос Game.active, я получаю сообщение об ошибке. Это та же ошибка в консоли rails или если я пытаюсь установить ее в переменную в контроллере. Ошибка:

undefined method `call' for #<Game::ActiveRecord_Relation:0x007ffadb540aa0>

При запуске в консоли я вижу:

irb(main):001:0> Game.active
NoMethodError:   Game Load (0.2ms)  SELECT `games`.* FROM `games`  WHERE `games`.`is_active` = 1
undefined method `call' for #<Game::ActiveRecord_Relation:0x007fcdca66b800>
    from /home/dcain/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:136:in `method_missing'

Ответы

Ответ 1

Rails 4+ требует, чтобы названные области были lambda, а не просто Relation.

Измените старую версию

scope :active, where(is_active: true)

в лямбда-версию

scope :active, lambda { where(is_active: true) }

или даже короче

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

Для получения дополнительной информации о названных областях и способах передачи параметров я предлагаю прочитать Области в руководстве Rails