PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да гарантирам, че дублиращите се редове не се добавят към моята таблица на база данни чрез activerecords?

Ако целостта на данните е критична, не трябва да използвате валидиране, за да гарантирате уникалност. Може да се провали. Единственият начин да се гарантира уникалност е да се използва ограничение на база данни. Това е така, защото Rails validates_uniqueness може да има условия за състезание.

Създайте миграция, за да добавите индекса, или променете съществуващия, за да отразите тази промяна:

За нова таблица:

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

За съществуваща таблица:

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

Сега можете да продължите и да добавите потвърждение, както е предложено от други, ако искате да дадете обратна връзка на потребителя си, че вече е гласувал:

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. Как работи функцията Ln() в PostgreSQL

  2. PostgreSQL използва ли tf-idf?

  3. Postgres - Множеството присъединявания карат моята заявка да връща неправилни данни

  4. Postgres конвертира тип PATH в ARRAY

  5. Postgres връща [null] вместо [] за array_agg на таблицата за свързване