首页 > 解决方案 > 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 。但我的问题是它为什么会引发这个错误?显然,我想在我的范围内按多个状态进行过滤。

标签: ruby-on-rails

解决方案


但在最坏的情况下,像“ActiveRecord::Relation 上没有定义新的”这样的错误

从关系/查询中实例化记录很有用。这与您在以下情况下使用的机制相同:

@comment = @user.comments.build # comment gets user_id pre-populated

在这种情况下,ActiveRecord 正确地未能找到将查询转换为有效对象状态的方法。尝试只有一种状态的示波器,它会起作用。


推荐阅读