Rails: validate uniqueness of two columns (together)

Jackson Cunningham picture Jackson Cunningham · Dec 22, 2015 · Viewed 65.5k times · Source

I have a Release model with medium and country columns (among others). There should not be releases that share identical medium/country combinations.

How would I write this as a rails validation?

Answer

tompave picture tompave · Dec 22, 2015

You can use a uniqueness validation with the scope option.

Also, you should add a unique index to the DB to prevent new records from passing the validations when checked at the same time before being written:

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