ruby-on-rails ruby-on-rails-4.1

ruby on rails - Rails 4-método indefinido `call ''al hacer una consulta simple



ruby-on-rails ruby-on-rails-4.1 (1)

Rails 4+ requiere que los ámbitos con nombre sean una lambda y no solo una Relation simple.

Cambia la versión antigua.

scope :active, where(is_active: true)

a la version lambda

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

o incluso más corto para

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

Para obtener más información sobre los ámbitos con nombre y cómo pasar parámetros, sugiero leer sobre los ámbitos en la Guía de Rails

Soy nuevo en Rails pero esto parece bastante sencillo. Tengo un modelo llamado Game generado así:

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

He cargado la tabla con algunos datos y estoy intentando recuperar todas las filas donde is_active es true . Me gustaría que mi modelo fuera algo como:

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

Mi problema es que siempre que intento enlazar con la consulta Game.active me Game.active un error. Es el mismo error en la consola de los rieles o si intento establecerlo en una variable en el controlador. El error es:

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

Cuando se ejecuta en la consola veo:

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''