1

Rails 3.2 で記述された既存の Rails アプリがあり、PostgreSQL を db エンジンとして使用しています。製品テーブルには、複数の Web サイトの製品が含まれています。現在、すべての製品はエントリ時に一意の ID を取得します。

モデルは次のとおりです。

class Platform < ActiveRecord::Base
  attr_accessible :name, :url, :country, :email
  validates :name, :presence => true, 
        :length => { :minimum => 1 }
  has_many :sectors
end

schema.rb からのこのテーブルのデータベース スキーマ

create_table "platforms", :force => true do |t|
    t.string   "name"
    t.string   "url"
    t.datetime "created_at",                               :null => false
    t.datetime "updated_at",                               :null => false
    t.string   "country"
    t.string   "email"
  end

「URL」パラメータを使用して、エントリまたは新製品を禁止する別の「一意のキー」を追加することは可能ですか? 既存のレコードに損傷を与えることなく、そのようなことを達成するのは難しいと思いRails g migrationます(重複がすでに存在する場合)。

だから基本的に:新製品のURLがデータベースに既にあるURLに対応する場合、Railsに新製品の追加を禁止してもらいたい. 1 が既にデータベースに登録されています。

4

1 に答える 1

2

モデルでそれを行うことができます:

class MyModel < ActiveRecord::Base
  validates_uniqueness_of :url
end

または (DB によっては、MySQL は PGsql とは異なる反応を示す可能性があります):

# migration file
t.string :url, :null => false, :unique => true
于 2012-12-14T18:59:30.077 に答える