Как проверить уникальность в JSON? - PullRequest
0 голосов
/ 17 декабря 2018

Как я могу проверить поле имени в моем классе пользователя?

пример :

User.create(name: { en: "name", ka: "1" }) // => ok
User.create(name: { en: "name", ka: "2" }) // => error

Вот класс:

class User < ApplicationRecord
  validates :name, presence: true, json: { schema: NAME_SCHEMA }
end

Вот схема имени:

{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "maxLength": 150
    },
    "ka": {
      "type": "string",
      "maxLength": 150
    }
  }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Я считаю, что для этого нет встроенного валидатора.Но это довольно легко написать:

class JsonUniqValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    records = record.class.select(attribute)
    value.keys.each do |key| 
      if records.any? { |record| record.public_send(attribute)[key] == value[key] }
        record.errors[attribute] << options[:message] || "variant #{key} is not unique"
  end
end

class Person < ApplicationRecord
  validates :name, :json_uniq => true
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...