Mysql 如何在RubyonRails中向表列添加unique

Mysql 如何在RubyonRails中向表列添加unique,mysql,ruby-on-rails,Mysql,Ruby On Rails,我有一个包含一些列的表,现在我需要修改一个列以使其唯一(没有重复的值),如何在RubyonRails中做到这一点 您可以向模型添加验证,以禁止重复的值 class MyModel < ActiveRecord::Base validates_uniqueness_of :my_column_name end classmymodeltrue 结束 这是直接来自我工作项目的代码: add_index( :tickets, [:to_email, :body_hash, :from_e

我有一个包含一些列的表,现在我需要修改一个列以使其唯一(没有重复的值),如何在RubyonRails中做到这一点

您可以向模型添加验证,以禁止重复的值

class MyModel < ActiveRecord::Base
   validates_uniqueness_of :my_column_name
end
classmymodel
:)


然后将验证添加为@j。回答

如果我错了,有人会纠正我,因为我没有亲自使用它,但我相信您可以使用迁移在数据库级别设置唯一性

def self.up
    change_column :<table name>, :<attribute name>, :<data type>, :unique => true
end
def self.up
更改列:,:,:,:unique=>true
结束

这是直接来自我工作项目的代码:

add_index( :tickets, [:to_email, :body_hash, :from_email] , :unique => true, :limit => 255)
注意limit功能只有在文本字段(而不是字符串)上使用unique时才需要,尽管它还没有在rails中实现(我相信是3.0版本)。您可以通过使用mysql\u index\u length插件绕过这个限制

本例为三列创建一个唯一索引,但如果需要,可以将其用于一列

链接到GitHub上的项目:

或者您可以在迁移中使用原始sql来实现这一点

execute <<-SQL
  ALTER TABLE Persons
  ADD UNIQUE (P_Id)
SQL

执行mysql。在我这样做之后,我向数据库中添加了重复数据,没有任何问题。我相信
:unique
键是属于
add_index
的选项。这对我来说适用于mysql版本14.14发行版5.5.31,适用于debian linux gnu(x86_64)。我喜欢这个解决方案。对于多进程的高流量,这可能会中断。
add_index( :table_name, [:column_name, :second_column_name, :third_column_name] , :unique => true, :limit => 255)
class MyModel < ActiveRecord::Base
  validates_uniqueness_of :my_column_name
end
class AddEmailIndexToUser
  def change
    # If you already have non-unique index on email, you will need
    # to remove it before you're able to add the unique index.
    add_index :users, :email, unique: true
  end
end
execute <<-SQL
  ALTER TABLE Persons
  ADD UNIQUE (P_Id)
SQL