我通过“rails generated 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 第一次成功完成了此操作。我第二次使用 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:migrate之后创建的模式是:
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
通过 http://guides.rubyonrails.org/migrations.html
如果您想在新列上添加索引,您可以这样做 嗯:
$rails 生成迁移 AddPartNumberToProducts 零件编号:字符串:索引
你的发电机
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
此命令[Rails 5.2.3]
rails generate migration AddIndexToUsers email:string:index
其实会给你
class AddIndexToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :email, :string
add_index :users, :email
end
end
不仅
add_index
还 add_column
到用户表。
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
来自 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
也可以生成唯一索引:
rails g migration add_index_to_products_code code:string:uniq
这会给你:
class AddIndexToProductsCode < ActiveRecord::Migration[7.2]
def change
add_column :products_codes, :code, :string
add_index :products_codes, :code, unique: true
end
end