Câu trả lời hiện được chấp nhận về vấn đề này không thực sự chính xác vì nó không thêm khóa ngoại cơ sở dữ liệu. Nó chỉ là thêm các cột số nguyên.
Trong Rails 4.2.x , cách tiếp cận hiện tại là:
http://guides.rubyonrails.org/active_record_migrations.html#foreign-keys
Tạo di chuyển:
rails generate migration migration_name
Đối với các cột hiện có , trong quá trình di chuyển, hãy thêm các khóa ngoại như sau:
class MigrationName < ActiveRecord::Migration
def change
add_foreign_key :business_hours, :businesses
add_foreign_key :businesses, :users
end
end
Đối với Rails 4.x hoặc nếu bạn đang thêm cột mới và muốn nó là một khóa ngoại, bạn có thể làm điều này, trong đó bạn có thể cũng muốn chỉ định chỉ mục là true, nhưng đó không phải là một phần của yêu cầu đối với khóa ngoại:
http://edgeguides.rubyonrails.org/active_record_migrations.html#creating-a-migration
class MigrationName < ActiveRecord::Migration
def change
add_reference :business_hours, :business, index: true, foreign_key: true
add_reference :businesses, :user, index: true, foreign_key: true
end
end