ruby-on-rails - ArgumentError: '[0, 1]' 不是 Rails 枚举的有效状态
问题描述
问题:
class MyModel < ActiveRecord::Base
enum status: [:queued, :pending, :processed]
scope :queued_and_pending, -> { where(status: [statuses[:queued], statuses[:pending]]) }
end
MyModel.queued_and_pending.new
# => ArgumentError: '[0, 1]' is not a valid status
现在我知道正确的方法是 MyModel.new 而不是 MyModel.queued_and_pending.new 。但我的问题是它为什么会引发这个错误?显然,我想在我的范围内按多个状态进行过滤。
解决方案
但在最坏的情况下,像“ActiveRecord::Relation 上没有定义新的”这样的错误
从关系/查询中实例化记录很有用。这与您在以下情况下使用的机制相同:
@comment = @user.comments.build # comment gets user_id pre-populated
在这种情况下,ActiveRecord 正确地未能找到将查询转换为有效对象状态的方法。尝试只有一种状态的示波器,它会起作用。
推荐阅读
- html - 谷歌自动完成时黄色覆盖的用户名输入字段(Bootstrap 4.1)?
- ruby-on-rails - 如何一一显示设计错误消息
- ionic-framework - 使用 Appium 测试 Ionic 应用程序时页面上的 ID 元素不存在
- matlab - 防止数据接触轴
- excel - 单行复制粘贴宏,它将根据工作表之间的单元格内容重复
- javascript - 然后使用数组链接
- mysql - 存储过程 - 尝试获取字段大小
- python - 如何打印在 python 中不同类的方法中定义的变量值?
- scala - scala中的无符号整数
- node.js - 为什么当我安装一个新的 npm 包时,我必须运行“docker-compose down”,然后运行“docker-compose up --build”?