我具有属性用户的语言。表格提交时,它必须返回数组?
我想在模型用户中写验证:
validates :languages, presence: true
写入验证方式,返回值必须是数组?
class User< ApplicationRecord
validate :languages_is_array
def languages_is_array
if !languages.kind_of?(Array)
errors.add(:languages, "must be an array")
end
end
#Another version, as moveson commented
def languages_is_array
errors.add(:languages, "must be an array") unless languages.kind_of?(Array)
end
end
,如果您担心用户以表单中提交的内容,而不是模型的验证。
请参阅:操作控制器概述-4.5强参数
要声明参数中的值必须是允许的标量值的数组,请将键映射到空数组:
params.permit(id: [])
您还可以为属性创建自己的自定义验证器。
在这种情况下,它看起来像:
class ArrayValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value.is_a? Array
record.errors.add attribute, (options[:message] || "must be an array")
end
end
end
class User < ApplicationRecord
validates :languages, array: true
end
请参阅:https://guides.rubyonrails.org/active_record_validations.html#custom-validators