PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara memastikan bahwa baris duplikat tidak ditambahkan ke tabel database saya melalui activerecords?

Jika integritas data sangat penting, Anda tidak boleh menggunakan validasi untuk menjamin keunikan. Itu bisa gagal. Satu-satunya cara untuk menjamin keunikan adalah dengan menggunakan batasan database. Ini karena validates_uniqueness Rails dapat memiliki kondisi balapan.

Buat migrasi untuk menambahkan indeks, atau ubah yang sudah ada untuk mencerminkan perubahan ini:

Untuk tabel baru:

class CreateVotes < ActiveRecord::Migration
  def change
    create_table :votes do |t|
      t.belongs_to :voter
      t.belongs_to :votefor
      t.string :vote # Choose the correct column type
      t.timestamps
    end
    add_index :votes, [:voter_id, :votefor_id, :vote], unique: true
  end
end

Untuk tabel yang ada:

class AddUniqueIndexToVotes < ActiveRecord::Migration
  def change
    add_index :votes,  [voter_id, votefor_id, vote], unique: true
  end
end

Sekarang Anda dapat melanjutkan dan menambahkan validasi, seperti yang disarankan oleh orang lain, jika Anda ingin memberikan umpan balik kepada pengguna bahwa mereka telah memilih:

validates :voter_id, uniqueness: { scope: [:votefor_id, :vote] }


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jenis JOIN apa yang digunakan

  2. Temukan semua kecocokan untuk tim tertentu di PostgreSQL

  3. PG::ConnectionBad:fe_sendauth:tidak ada kata sandi yang diberikan

  4. PostgreSQL:serial vs identitas

  5. desain database postgresql untuk e-niaga