Рельсы проверяют в модели, что значение находится внутри массива
У меня есть форма, в которой я передаю поле с именем :type
, и я хочу проверить, находится ли это значение внутри массива разрешенных типов, чтобы никто не может размещать недопустимые типы.
массив выглядит как
@allowed_types = [
'type1',
'type2',
'type3',
'type4',
'type5',
'type6',
'type7',
etc...
]
У меня есть с использованием validates_exclusion_of
или validates_inclusion_of
, но он не работает
Ответы
Ответ 1
сначала, измените атрибут из типа на что-то еще, тип - это зарезервированное использование имени attrubute для одиночного наследования таблицы и т.д.
class Thing < ActiveRecord::Base
validates :mytype, :inclusion=> { :in => @allowed_types }
Ответ 2
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.