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