我正在进行"Ruby On Rails 3基本培训",在使用名称作用域时遇到了一个问题.在Rails控制台中查找记录和使用查询时,一切都很顺利,直到我try 在主题中使用名称范围.rb文件.这是我的代码.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)
}

这样做的原因是,它确保每次使用范围时都对块的内容进行判断.

Ruby-on-rails相关问答推荐

对Rails进行枚举不允许空值

Rails 7 中的预编译

'elseif' 还存在吗?

在哈姆尔与当地人进行局部渲染?

如何从设计中删除/禁用注册

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

如何将实例变量传递给 RSpec 共享示例

理解 Gemfile.lock:删除 Gemfile.lock 然后再次运行 bundle install 可以吗?

添加自定义字段/列以使用 Rails 4 进行设计

Rails - 使用 %W

适合mysql比较的Ruby datetime

使用 RSpec 2 关闭一个规范的事务性固定装置

在 where 查询中查找 nil has_one 关联

批量查找 mongoDB 记录(使用 mongoid ruby​​ 适配器)

获取磁盘上 ActiveStorage 文件的路径

Django 还是 Ruby-On-Rails?

Heroku - 在浏览器中显示当前提交的哈希

ActiveRecord 中多列的索引

Rails:每个环境的初始化程序?

使用 ActiveRecord 获取列名