UNIQUE制約をつける

DBテーブルの列の一つに UNIQUE制約をつけたい。Rails(ActiveRecord)自体はそんな機能は無いみたい。create_table や add_column のオプションに、:null みたいな感じで :unique とか設定できたらいいのに。
基本は validate_uniqueness_of宣言の方でチェックしなさいという事なのかな。
あとは add_index のオプションには :unique => true というのが可能なのでそっちか。
create_tableメソッドの optionsハッシュ引数には、:optionsというキーがあってそこに SQL が掛けるんだけど、それでやるのは反則だよな。

  def self.up
    create_table :days , :options => '; ALTER TABLE days ADD UNIQUE (date);' do |t|
      t.date :date, :null => false

      t.timestamps
    end
  end

テーブル作成の :option は、「CREATE TABLE days (<云々>)」の「)」の後にただ繋がってくるので、テーブル制約として「UNIQUE (date)」と書いてもエラーになる。ALTER で、しかも頭に「;」とか、やっぱ反則だよな。
その制約は「"days_date_key" UNIQUE, btree (date)」

一方 add_index だと

  def self.up
    create_table :days do |t|
      t.date :date, :null => false

      t.timestamps
    end
    add_index :days, :date, :unique => true
  end

その制約は「"index_business_days_on_date" UNIQUE, btree (date)」
制約名がちょっと違ってくるけどユニークネスについては同様なのでこっちを使うのが想定されてるのでしょう、きっと。