使用枚举时出现参数错误

问题描述 投票:0回答:3

我在访问“MyModel”时遇到此错误

ArgumentError: wrong number of arguments (3 for 0) from /Users/.../.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/enum.rb:131:in `block (4 levels) in enum'

当我在模型上使用枚举时

class MyModel < ActiveRecord::Base       
  include ActiveModel::Validations
  enum transaction_type: { send: "send", reset: "reset", top_up: "top_up" }
end 

这是以前从未发生过的事情。我认为我在设置时没有做任何与平常不同的事情。

ruby-on-rails ruby activerecord enums
3个回答
1
投票

出现错误是因为您在此处使用值“send”作为枚举值。 “send” 是所有 ruby 对象都可用的方法。因此,rails 没有访问枚举,而是意外地尝试使用“发送”方法,这就是您收到“参数数量错误”错误的原因。使用其他名称,例如“send_out”。


0
投票

当使用枚举并传递哈希值时,该值只能是整数

class MyModel < ActiveRecord::Base       
  include ActiveModel::Validations
  enum transaction_type: { send: 0, reset: 1, top_up: 2 }
end

或者,您可以使用数组

class MyModel < ActiveRecord::Base       
  include ActiveModel::Validations
  enum transaction_type: [ :send, :reset, :top_up]
end

注意: 一旦将值添加到枚举数组中,就必须保持其在数组中的位置,并且新值只能添加到数组的末尾。如果您不希望这样,则应使用上面的显式哈希语法。


0
投票

如果您使用的是 Rails 7 或更高版本,似乎语法已更改。

ActiveRecord::枚举

class MyModel < ActiveRecord::Base       
  include ActiveModel::Validations

  enum :transaction_type,  { send: "send", reset: "reset", top_up: "top_up" }
end 
© www.soinside.com 2019 - 2024. All rights reserved.