Saya memiliki Release
model dengan kolom medium
dan country
(antara lain). Seharusnya tidak ada releases
bagian yang identik medium
/ country
kombinasi.
Bagaimana saya menulis ini sebagai validasi rel?
Saya memiliki Release
model dengan kolom medium
dan country
(antara lain). Seharusnya tidak ada releases
bagian yang identik medium
/ country
kombinasi.
Bagaimana saya menulis ini sebagai validasi rel?
Jawaban:
Anda dapat menggunakan validasi keunikan dengan scope
opsi.
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
unique
tidak 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 country
di semua baris dengan nilai medium
dan 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 :scope
parameter ke validator Anda seperti ini:
validates_uniqueness_of :medium, scope: :country
Lihat dokumentasi untuk beberapa contoh lainnya.