PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để đảm bảo rằng các hàng trùng lặp không được thêm vào bảng cơ sở dữ liệu của tôi thông qua activerecords?

Nếu tính toàn vẹn của dữ liệu là rất quan trọng, bạn không nên sử dụng xác thực để đảm bảo tính duy nhất. Nó có thể thất bại. Cách duy nhất để đảm bảo tính duy nhất là sử dụng một ràng buộc cơ sở dữ liệu. Điều này là do Rails validates_uniqueness có thể có các điều kiện về chủng tộc.

Tạo di chuyển để thêm chỉ mục hoặc thay đổi chỉ mục hiện có của bạn để phản ánh thay đổi này:

Đối với một bảng mới:

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

Đối với một bảng hiện có:

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

Bây giờ, bạn có thể tiếp tục và thêm xác thực, theo đề xuất của những người khác, nếu bạn muốn cung cấp cho người dùng phản hồi rằng họ đã bỏ phiếu:

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. Sao chép bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong Postgres

  2. Nhà cung cấp OleDB / ODBC tốt cho PostgreSQL

  3. Tạo bảng trong hình ảnh docker PostgreSQL

  4. Thay thế một chuỗi bằng một chuỗi khác từ danh sách tùy thuộc vào giá trị

  5. Không thể bỏ vai trò được cấp để kết nối cơ sở dữ liệu