Как проверить имя, состоящее из двух столбцов? - PullRequest
0 голосов
/ 18 января 2012

Как проверить имя, состоящее из двух столбцов, с помощью простого вызова validate или с помощью метода проверки?

У меня есть имя, состоящее из двух столбцов, firstname и surname.Запись действительна только в том случае, если firstname + surname уникальна.

Если я добавлю firstname: "lala la", surname: "le li lo", она действительна, потому что она единственная.

Если я введу firstname: "lala", surname: "la le li lo", и конкатенация firstname и surname одинакова в обоих примерах, второй не должен быть действительным.

Я не могу найти простой способ сделать это.

Я пробовал что-то вроде:

validates_uniqueness_of :firstname, :surname, :scope => {:firstname, :surname}

или их комбинации, но это не сработало.

Ответы [ 2 ]

3 голосов
/ 18 января 2012

firstname = "lalla", фамилия = "leli"

и

firstname = "la", surname = "llaleli" разные, поэтому следующая проверка не может подтвердить это

validates :surname, :uniqueness => { :scope => :firstname }

попробуйте это

Идея состоит в том, чтобы вычислить полное имя (в обратном вызове, как before_validation) и сохранить его в таблице (поэтому вам нужен другой столбец), теперь добавьте проверку для этого столбца

before_validation :compute_fullname
validates :fullname, :uniqueness => true


def compute_fullname 
   fullname = (first_name+surname).replace ' ',''  #i don't like gusb you can try it too
end
2 голосов
/ 18 января 2012

Попробуйте:

validates :surname, :uniqueness => { :scope => :firstname }
validates :firstname, :uniqueness => { :scope => :surname }

РЕДАКТИРОВАТЬ : это можно сделать с помощью validates_with , но остерегайтесь производительности, если вы хотите проверить свой крайний случай из вопросагде:

firstname: "lala la", surname: "le li lo" 

является дубликатом:

firstname: "lala", surname: "la le li lo" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...