Saya memiliki Releasemodel dengan kolom mediumdan country(antara lain). Seharusnya tidak ada releasesbagian yang identik medium/ countrykombinasi.
Bagaimana saya menulis ini sebagai validasi rel?
Saya memiliki Releasemodel dengan kolom mediumdan country(antara lain). Seharusnya tidak ada releasesbagian yang identik medium/ countrykombinasi.
Bagaimana saya menulis ini sebagai validasi rel?
Jawaban:
Anda dapat menggunakan validasi keunikan dengan scopeopsi.
Selain itu, Anda harus menambahkan indeks unik ke DB untuk mencegah record baru lolos validasi saat diperiksa pada saat yang sama sebelum ditulis:
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
uniquetidak dikenali. Untuk bagian itu saya telah menggunakan jawaban di bawah ini.
uniqueness, bukan unique. Lihat dokumentasi terkait. Memperbaiki jawabannya.
Semua jawaban di atas tidak memiliki cara memvalidasi keunikan beberapa atribut dalam sebuah model. Kode di bawah ini bermaksud untuk memberi tahu cara menggunakan beberapa atribut dalam satu ruang lingkup.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Ini memvalidasi keunikan countrydi semua baris dengan nilai mediumdan another_medium.
Catatan: Jangan lupa untuk menambahkan indeks pada kolom di atas, ini menjamin pengambilan cepat dan menambahkan validasi tingkat DB untuk catatan unik.
Pembaruan: Untuk menambahkan indeks saat membuat tabel
t.index [:medium, :another_medium], unique: true
Anda dapat mengirimkan :scopeparameter ke validator Anda seperti ini:
validates_uniqueness_of :medium, scope: :country
Lihat dokumentasi untuk beberapa contoh lainnya.