参数错误:范围正文需要被调用
我正在通过“Ruby On Rails 3基本培训”工作,并且在使用名称范围时遇到了问题。 当findlogging和使用Rails控制台查询时,一切都很顺利,直到我试图在我的subject.rb文件中使用一个名称范围。 这是我的代码在subject.rb文件。
Class Subject < ActiveRecord::Base scope :visible, where(:visible => true) end
我保存了.rb文件并重新启动了我的Rails控制台,但是当我从rails控制台运行时:
subjects = Subject.visible
我得到: ArgumentError: The scope body needs to be callable.
有谁知道为什么我得到这个错误。
范围的身体需要包装在像Proc或Lambda一样可调用的东西中:
scope :visible, -> { where(:visible => true) }
其原因在于,它确保每次使用范围时都会评估块的内容。
我得到了同样的错误,而在我的解决scheme之前,我有一个空间之间和(
如下图
scope :registered , -> { where ( place_id: :place_id , is_registered: :true ) }
之后我删除了之间的空间(
如下面我做我的网页工作
scope :registered , -> { where( place_id: :place_id , is_registered: :true ) }
是的,事实上,这是调用示波器的方式。 如果要从Rails 3升级到Rails 4,则需要更改它。
你正在使用的是: scope :visible, where(:visible => true)
用于加载,并且在Rails 4中已经被弃用了。
scope :visible, where(:visible => true)
这行代码在特定的类被加载的时候被评估,而不是在这个scope
被调用的时候 。
有些情况下,这件事很重要,比如:
scope :future, where('published_at > ?', Time.now) scope :future, -> { where('published_at > ?', Time.now) }
在第一种情况下, ?
将会被类加载的时间所替代,但是第二个正确的例子将被用于在该类上调用范围。