Nếu bạn cần tạo một user_idthì sẽ là một giả định hợp lý rằng bạn đang tham chiếu đến một bảng người dùng. Trong trường hợp đó, việc di chuyển sẽ là:
rails generate migration AddUserRefToProducts user:references
Lệnh này sẽ tạo ra quá trình di chuyển sau:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Sau khi chạy rake db:migratecả user_idcột và chỉ mục sẽ được thêm vào productsbảng.
Trong trường hợp bạn chỉ cần thêm một chỉ mục vào một cột hiện có, chẳng hạn như namemột userbảng, kỹ thuật sau có thể hữu ích:
rails generate migration AddIndexToUsers name:string:index sẽ tạo ra sự di chuyển sau:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Xóa add_columndòng và chạy quá trình di chuyển.
Trong trường hợp được mô tả, bạn có thể đã đưa ra rails generate migration AddIndexIdToTable index_id:integer:indexlệnh và sau đó xóa add_columndòng khỏi di chuyển đã tạo. Nhưng tôi khuyên bạn nên hoàn tác quá trình di chuyển ban đầu và thay vào đó thêm tham chiếu:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references