перевірка рейки 3 на унікальність для кількох атрибутів


177

Я використовую Rails 3.0.0.beta4

Я хочу додати перевірку унікальності за двома атрибутами, це означає, що моя модель дійсна, якщо пара 'recorded_at'і 'zipcode'є унікальною.

Один атрибут тут - синтаксис

validates :zipcode, :uniqueness => true

Дякую

Відповіді:


333

У Rails 2 я б написав:

validates_uniqueness_of :zipcode, :scope => :recorded_at

У рейках 3:

validates :zipcode, :uniqueness => {:scope => :recorded_at}

Для кількох атрибутів:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}

7
Я б сказав, що логічно має сенс сказати, що вам потрібно recorded_atбути унікальним у межах поштового індексу. validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan

2
ви все одно можете зробити це рейки двома способами, і я вважаю, що це читабельніше, якщо ви не робите кілька типів перевірки на одній властивості.
зем

24
Ви б затвердили групу з трьох осіб validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}?
Грег Гуйда

5
Я додам, що якщо ви хочете використовувати :scopeна зовнішніх клавішах, вам потрібно використовувати :fkey_idсимволи, а не символи :fkey, навіть якщо "basic" :uniquenessпрацює на:fkey
nbarraille

1
Ви, мабуть, хочете додати користувальницьку помилку msg, наприклад, :message => ' is taken for this recorded date'
laffuste

96

Кілька параметрів застосування:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

Це має відповісти на запитання Грега.


Грег, здається, більше зацікавлений у використанні ярлика "валідати", тому більш швидка відповідь на його питання "так"
elc

Це дуже важливо знати, я саме дивився на це, чи повинен я використовувати _id (чи ні) під час перевірки наявності асоціацій у сферах застосування.
Франческо Беладонна

Ця відповідь працює в Rails 4.1.6 validates_uniqueness_of: cart_id, area: [: location_id,: plug_id]
Conor

6

Не працюйте для мене, потрібно поставити область в множині

validates_uniqueness_of: učitelj_id,: область s => [: semester_id,: class_id]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.