使用枚举进行Rails验证

时间:2017-01-17 12:28:05

标签: ruby-on-rails activerecord rails-activerecord

我的Box模型中有一个枚举

enum box_type: [:wooden, :plastic, :metal, :paper]

我希望我的Box模型的box_type属性只是其中之一,所以:

validates :box_type, inclusion: {in: box_types.keys }

它似乎应该完美无缺,但在创建我的Box模型时我也有一个默认值,设置如下:

class CreateBoxes < ActiveRecord::Migration[5.0]
  def change
    create_table :boxes do |t|
        ...
        t.string  :box_type,      null: false, default: "paper"
        ...
      t.timestamps
    end
  end
end

当我尝试在我的控制台中创建记录时,我得到回滚。 错误:

@messages={:box_type=>["is not included in the list"]}, @details={:box_type=>[{:error=>:inclusion, :value=>nil}]}

问题:

  1. 我做错了什么?
  2. 有没有更好的方法只允许我的数据库列中的特定值?

1 个答案:

答案 0 :(得分:1)

enum在数据库中存储整数,而不是字符串。尝试将列类型更改为整数,默认为0

  

声明一个枚举属性,其中值映射到的整数   数据库,但可以按名称查询。