Подтвердить что ты не робот

Рельсы проверяют в модели, что значение находится внутри массива

У меня есть форма, в которой я передаю поле с именем :type, и я хочу проверить, находится ли это значение внутри массива разрешенных типов, чтобы никто не может размещать недопустимые типы.

массив выглядит как

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

У меня есть с использованием validates_exclusion_of или validates_inclusion_of, но он не работает

4b9b3361

Ответ 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.