Given you have an array as an attribute and want to check whether all of its items are included in another array.
class ArrayInclusionValidator < ActiveModel::EachValidator
def validate_each(record, attribute, values)
invalid_values = values - options[:in]
record.errors.add(attribute, I18n.t("errors.messages.array_inclusion", invalid_values: invalid_values.join(", "))) if invalid_values.present?
end
end
Use it as:
validates :available_cat_breeds,
array_inclusion: {in: %w[british_shorthair birman persian]}