我有一个表单,我传递一个名为 :type
的字段,我想检查它的值是否在允许类型数组内,以便< strong>不允许任何人发布不允许的类型。
数组看起来像
@allowed_types = [
'type1',
'type2',
'type3',
'type4',
'type5',
'type6',
'type7',
etc...
]
我尝试使用 validates_exclusion_of
或validates_inclusion_of
,但它似乎无法正常工作
答案 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