1

我现有的 Rails 应用程序是用 Rails 3.2 编写的,并使用 PostgreSQL 作为数据库引擎。我们的产品表包含来自多个网站的产品。目前,每个产品在进入时都会获得一个唯一的 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 禁止添加新产品,类似于如果有 id= 的产品,我不允许输入 id=1 的产品1 已经在数据库中了。

4

1 回答 1

2

您可以在模型上执行此操作:

class MyModel < ActiveRecord::Base
  validates_uniqueness_of :url
end

或者(取决于您的数据库,MySQL 的反应可能与 PGsql 不同):

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