У мене є Releaseмодель з mediumі countryстовпцями (серед інших). Не повинно бути releasesспільних ідентичних medium/ countryкомбінацій.
Як би я записав це як перевірку рейок?
У мене є Releaseмодель з mediumі countryстовпцями (серед інших). Не повинно бути releasesспільних ідентичних medium/ countryкомбінацій.
Як би я записав це як перевірку рейок?
Відповіді:
Ви можете використовувати перевірку унікальності за допомогою scopeпараметра.
Крім того, ви повинні додати унікальний індекс до БД, щоб запобігти проходженню нових записів перевірок, якщо вони перевіряються одночасно перед тим, як записати:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end
unique, яка не визнається. Для цієї частини я використав відповідь нижче.
uniqueness, ні unique. Дивіться пов'язану документацію. Закріплення відповіді.
У всіх вищезазначених відповідях відсутнє, як перевірити унікальність декількох атрибутів у моделі. Код нижче має на меті розповісти, як використовувати декілька атрибутів у межах області.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Він підтверджує унікальність countryу всіх рядках зі значеннями mediumта another_medium.
Примітка. Не забудьте додати індекс у вищевказаний стовпець, це гарантує швидке отримання та додає перевірку рівня БД для унікальних записів.
Оновлення: для додавання індексу під час створення таблиці
t.index [:medium, :another_medium], unique: true
Ви можете передати :scopeпараметр валідатору так:
validates_uniqueness_of :medium, scope: :country
Дивіться документацію для додаткових прикладів.