rails在模型中验证值是否在数组内部

时间:2012-08-21 16:41:56

标签: ruby-on-rails arrays validation text model

我有一个表单,我传递一个名为 :type字段,我想检查它的值是否在允许类型数组内,以便< strong>不允许任何人发布不允许的类型

数组看起来像

@allowed_types = [
   'type1',
   'type2',
   'type3',
   'type4',
   'type5',
   'type6',
   'type7',
   etc...
]

尝试使用 validates_exclusion_ofvalidates_inclusion_of,但它似乎无法正常工作

3 个答案:

答案 0 :(得分:41)

首先,将属性从type更改为其他类型,type是用于单表继承的保留属性名称等。

class Thing < ActiveRecord::Base
   validates :mytype, :inclusion=> { :in => @allowed_types }

答案 1 :(得分:20)

ActiveModel::Validations为此提供了一个帮助方法。一个示例调用是:

class Person < ActiveRecord::Base
    validates_inclusion_of :gender, :in => %w( m f )
   ...
end

或在你的情况下:

validates_inclusion_of :type, in: @allowed_types

ActiveRecord :: Base已经是ActiveModel :: Validations,因此不需要包含任何内容。

http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_inclusion_of

另外,@ RadBrad是正确的,你不应该使用type作为列名,因为它是为STI保留的。

答案 2 :(得分:3)

只为那些懒惰的人(如我)复制最新的语法:

validates :status, inclusion: %w[pending processing succeeded failed]
  • validates_inclusion_of自Rails 3起过时。
  • :inclusion=>哈希语法自Ruby 2.0起已经过时。
  • 赞成将%w设置为单词数组,将其作为默认Rubocop option

有变化:

默认类型为常量:

STATUSES = %w[pending processing succeeded failed]

validates :status, inclusion: STATUSES

OP的原件:

validates :mytype, inclusion: @allowed_types