我是一名使用rails api的新手ruby程序员。问题是api正在生产中,现在我想为模型中的一个列添加唯一约束。目前允许重复条目,我想使该列唯一。
所以我添加了两个具有相同名称的灯具:
two:
name: MyString2
location:
status: 2
three:
name: MyString2
location:
status: 1
然后我尝试运行这样的迁移:
class AddUniqueToLocationColumnName < ActiveRecord::Migration
class User < ActiveRecord::Base
end
def self.up
remove_index :locations, column: :name
add_index :locations, :name, unique: true
end
def self.down
remove_index :locations, column: :name # remove unique index
add_index :locations, :name # adds just index, without unique
end
end
但它显示错误:&#34;数据库中存在重复项。迁移失败。&#34; 同样是问题。我已经在生产表中有重复项了。我想为列&#34; name&#34;添加一个唯一约束。在表格#34;位置&#34; 。我怎样才能使这个专栏独一无二?
答案 0 :(得分:0)
因此,您不希望位置模式中的任何两个条目有任何重复的名称,但重复项已经存在?你必须通过以下两种方法摆脱重复:
删除模型中的数据并从头开始
删除名称重复的个别地点
更改重复位置的名称。
所有这些都可以在rails / heroku控制台中轻松完成。
此外,您可以将此代码添加到您的位置模型中:
class Location < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
end