Использование разве что в рельсах проверки уникальности - PullRequest
2 голосов
/ 21 мая 2010

Я только начинаю в Rails и пытаюсь разработать простое приложение.Мне нужно проверить три значения, представленные в приложении - каждое должно соответствовать одним и тем же критериям.

Проверка очень проста: значение действительно, если unqiue, null или равно «p» или «d».

Следующее приводит меня на полпути:

validates_uniqueness_of :value1, :value2, :value3, :allow_nil => true

Я думаю, что могу использовать: разве что, чтобы проверить, является ли значение "p" или "d", однако я не могу понятьКак.

Я думаю, я пытаюсь объединить validates_uniqueness_of с validates_inclusion_of.

Есть предложения?

1 Ответ

2 голосов
/ 21 мая 2010

Есть несколько способов сделать это.Я бы, наверное, пошел с чем-то вроде этого:

validates_uniqueness_of :wallport_id, :allow_nil => true, :unless Proc.new { |u| u.wallport_id == 'p' or u.wallport_id == 'd' }

Вы также можете разбить дополнительную логику на собственный метод, например:

validates_uniqueness_of :wallport_id, :unless :has_nonunique_wallport_id

NONUNIQUE_WALLPORT_IDS = ['p', 'd', nil]

def has_nonunique_wallport_id
  NONUNIQUE_WALLPORT_IDS.include? wallport_id
end

или протолкнуть всю проверкув своем собственном методе, например:

validate :has_valid_wallport_id

def has_valid_wallport_id
  # check wallport id and return either true or false
end

Наилучший подход, вероятно, зависит от того, какой из них вы считаете наиболее читаемым, какую функциональность вы можете использовать для других частей вашего кода (например, кому-то еще нужно)узнать о действительных неуникальных идентификаторах wallport?), и какие вещи вы ожидаете изменить (например, вы добавите больше действительных неуникальных идентификаторов позже?).Есть также несколько различных способов сделать фактическую проверку, которая снова сводится к тому, что вы считаете наиболее читабельным и как, по вашему мнению, может развиваться система.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...