Argument Error: The scope body needs to be callable
Argument Error: The scope body needs to be callable
我正在研究 'Ruby On Rails 3 Essential Training',在使用名称范围时遇到了问题。在 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)
}
这样做的原因是它确保每次使用范围时都会评估块的内容。
是的,确实,这是 rails 调用作用域的 4 种方式。如果您要从 Rails 3.
升级到 Rails 4,则需要更改它
我遇到了同样的错误,而在我的解决方案之前,我在 where
和 (
之间有一个 space,如下所示
scope :registered , -> { where ( place_id: :place_id , is_registered: :true ) }
在我删除 where
和 (
之间的 space 之后,如下所示,我使我的页面正常工作
scope :registered , -> { where( place_id: :place_id , is_registered: :true ) }
您正在使用什么:scope :visible, where(:visible => true)
用于预加载,并且在 Rails 4 中已被弃用。
scope :visible, where(:visible => true)
这行代码在加载特定 class 时被评估,而 当时没有,这 scope
被称为 。
在某些情况下这件事确实很重要,例如:
scope :future, where('published_at > ?', Time.now)
scope :future, -> { where('published_at > ?', Time.now) }
在第一种情况下,?
将被替换为 class 加载的时间,但第二种情况也是正确的情况,该时间将被用于加载范围在 class.
上被调用
我正在研究 'Ruby On Rails 3 Essential Training',在使用名称范围时遇到了问题。在 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)
}
这样做的原因是它确保每次使用范围时都会评估块的内容。
是的,确实,这是 rails 调用作用域的 4 种方式。如果您要从 Rails 3.
升级到 Rails 4,则需要更改它我遇到了同样的错误,而在我的解决方案之前,我在 where
和 (
之间有一个 space,如下所示
scope :registered , -> { where ( place_id: :place_id , is_registered: :true ) }
在我删除 where
和 (
之间的 space 之后,如下所示,我使我的页面正常工作
scope :registered , -> { where( place_id: :place_id , is_registered: :true ) }
您正在使用什么:scope :visible, where(:visible => true)
用于预加载,并且在 Rails 4 中已被弃用。
scope :visible, where(:visible => true)
这行代码在加载特定 class 时被评估,而 当时没有,这 scope
被称为 。
在某些情况下这件事确实很重要,例如:
scope :future, where('published_at > ?', Time.now)
scope :future, -> { where('published_at > ?', Time.now) }
在第一种情况下,?
将被替换为 class 加载的时间,但第二种情况也是正确的情况,该时间将被用于加载范围在 class.