添加索引:通过生成迁移,在rails上的ruby中的列是唯一的

Den*_*ler 18 database migration ruby-on-rails ruby-on-rails-3.2

我知道我可以触摸迁移并添加

add_index :table_name, :column_name, :unique => true
Run Code Online (Sandbox Code Playgroud)

但正确的rails migration命令如何生成呢?

rails g migration add_index_to_column_name :column_name, :unique => true
Run Code Online (Sandbox Code Playgroud)

是对的吗?

在我的特例中,我有一个表客户

  t.integer :customerID
  t.string :surname
  t.string :first_name
  t.string :phone
Run Code Online (Sandbox Code Playgroud)

我想将customerID设置为唯一.试着

rails g migration AddIndexToCustomers :customerID, :unique => true 
Run Code Online (Sandbox Code Playgroud)

但是,如果我在此之后查看我的迁移文件,它看起来不正确看到这个:

def change
    add_column :customers, :, :customerID,
    add_column :customers, :, :unique
    add_column :customers, :=, :string
  end
Run Code Online (Sandbox Code Playgroud)

有什么想法或建议吗?

ck3*_*k3g 34

从Rails 3.2开始,您可以使用:

 rails g migration add_index_to_table_name column_name:uniq
Run Code Online (Sandbox Code Playgroud)

示例来自http://guides.rubyonrails.org/3_2_release_notes.html

 rails g scaffold Post title:string:index author:uniq price:decimal{7,2}
Run Code Online (Sandbox Code Playgroud)

UPD对不起.如果不传递默认类型,则为string.你可以自己传递类型.

column_name:type:uniq
Run Code Online (Sandbox Code Playgroud)

因此,您的示例应如下所示:

rails g migration add_index_to_customers customerID:integer:uniq
Run Code Online (Sandbox Code Playgroud)

  • nope ..那是不行的`def change add_column:customerids,:customerID,:string add_index:customerids,:customerID,:unique => true end` (2认同)
  • 它应该是add_index_to_table_name而不是add_index_to_column_name. (2认同)