是否有效记录验证检查,如果类型为数组



我具有属性用户的语言。表格提交时,它必须返回数组?

我想在模型用户中写验证:

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

相关内容

最新更新