我通过“rails generate model User name:string email:string ...”创建了一个用户表,也创建了迁移文件。
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
end
现在我想在“教程之后”添加索引到电子邮件列“我第一次使用sqlite3成功完成了这项工作。第二次通过im使用MySql(mysql2)。再次使用生成模型创建表格。当我运行以下内容时:
rails generate migration add_index_to_users_email
该过程以没有错误消息结束并创建迁移文件,如下所示,但没有设置任何索引..
class AddIndexToUsersEmail < ActiveRecord::Migration
def change
end
end
我希望在那里看到add_index :users, :email, unique: true
...任何人都有任何想法..搜索其他线程无济于事。运行rails 4,mysql 5.6 ruby 1.9.3我在initil db之后创建的模式:迁移是:
ActiveRecord::Schema.define(version: 20131024161033) do
create_table "users", force: true do |t|
t.string "name"
t.string "email"
t.string "city"
t.string "state"
t.string "zip"
t.string "mobile_phone"
t.string "mobile_phone_type"
t.date "birth_date"
t.string "user_type"
t.string "ss_num"
t.boolean "agree_to_terms"
t.datetime "created_at"
t.datetime "updated_at"
end
end
答案 0 :(得分:31)
通过http://guides.rubyonrails.org/migrations.html
如果您想在新列上添加索引,可以这样做 好:
$ rails生成迁移AddPartNumberToProducts PART_NUMBER:字符串:索引
你的发电机
rails generate migration add_index_to_users_email
只是创建一个空的迁移文件而没有描述索引
所以这会更合适......
rails generate migration AddIndexToUsers email:string:index
应该给你
class AddIndexToUsers < ActiveRecord::Migration
def change
add_index :users, :email
end
end
答案 1 :(得分:11)
rails generate migration AddIndexToUsers email:string:index
如果您已经有列,则只需添加索引,例如:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_index :users, :email
end
end
如果你创建了新列(你还没有在数据库中有列),它会返回:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :user, :email, :string
add_index :users, :email
end
end
答案 2 :(得分:3)
来自http://railstutorial.ru/chapters/4_0/modeling-users#code-email_uniqueness_index。
电子邮件唯一性迁移未预先定义,因此我们需要使用自己的“add_index:users,:email,unique:true”来填充其内容。
结果将是:
class AddIndexToUsersEmail < ActiveRecord::Migration
def change
add_index :users, :email, unique: true
end
end