Rails проверяет уникальность с повторениями - PullRequest
0 голосов
/ 19 февраля 2012

Я хочу проверить уникальность с заданным количеством повторений, например, разрешено три пользователя с одинаковыми именами.

User id: 1, name: "user"
User id: 2, name: "user"
User id: 3, name: "user"

Но вы не можете создать четвертого пользователя с таким же именем. Что мне делать:

  1. Создать validates_uniqueness_of с параметрами?
  2. Или создать пользовательскую проверку?

Буду благодарен за примеры.

1 Ответ

3 голосов
/ 19 февраля 2012

Вам понадобится пользовательская проверка, например

validates :validate_three_maximum

def validate_three_maximum
  if User.where(:name => "user").count >= 3 && (new_record? || name_changed?)
    errors.add(:name, "Maximum of 3 with this name")
  end
end

Имейте в виду, что проверки уникальности базы данных в вашем приложении подвержены гонкам: см. Параллельность и целостность .

РЕДАКТИРОВАТЬ: добавлено new_record? + имя_изменено? отметьте, что обновление записи не засчитывается в 3.

...