【问题标题】:TypeError in enum validation while saving an object保存对象时枚举验证中的 TypeError
【发布时间】:2019-01-13 08:52:29
【问题描述】:

我有一个枚举,我正在尝试添加验证,但是当我在数据库中保存任何记录时,它给了我一个类型错误,即数组不是符号也不是字符串。代码如下:

validates :animal, inclusion: { in: %w(DOG, CAT), message: '%{value} is not a valid animal' }
enum animal: [:DOG, :CAT]

我收到以下错误: TypeError: ["DOG", "CAT"] 不是符号也不是字符串

【问题讨论】:

  • 你如何测试这些方法?在控制台还是网页上?输入中的值是什么?请显示相应的日志文件条目和完整的错误消息,包括堆栈跟踪。

标签: ruby-on-rails ruby validation


【解决方案1】:

ActiveRecord eunm 不需要单独的验证来检查包含。只需删除该自定义验证即可。默认情况下,当您使用不属于枚举值列表的值时,Rails 会抛出错误。

使用 Rails 5.2.2 测试:

class Person < ActiveRecord::Base
  enum animal: [:DOG, :CAT]
end

测试:

p = Person.new
=> #<Person ...>

p.animal = :DOG # this works
p.animal = :FROG

Traceback (most recent call last):
ArgumentError ('FROG' is not a valid animal)

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多