Làm thế nào để đường ray biết đó user_idlà một tham chiếu khóa nước ngoài user?
Bản thân Rails không biết đó user_idlà một tham chiếu khóa ngoại user. Trong lệnh đầu tiên, rails generate model Micropost user_id:integernó chỉ thêm một cột user_idtuy nhiên đường ray không biết việc sử dụng col. Bạn cần phải tự đặt dòng trong Micropostmô hình
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
các từ khóa belongs_tovà has_manyxác định mối quan hệ giữa các mô hình này và khai báo user_idlà khóa ngoại đối với Usermô hình.
Lệnh sau rails generate model Micropost user:referencesthêm dòng belongs_to :usertrong Micropostmô hình và từ đây tuyên bố là khóa ngoại.
FYI
Khai báo các khóa ngoại bằng phương thức cũ chỉ cho Rails biết về mối quan hệ mà các mô hình / bảng có. Cơ sở dữ liệu chưa biết về mối quan hệ. Do đó, khi bạn tạo Sơ đồ EER bằng phần mềm như MySql Workbenchbạn thấy rằng không có luồng quan hệ nào được vẽ giữa các mô hình. Giống như trong hình sau

Tuy nhiên, nếu bạn sử dụng phương pháp sau, bạn thấy rằng tệp di chuyển của bạn trông như sau:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
Bây giờ khóa ngoại được đặt ở cấp cơ sở dữ liệu. và bạn có thể tạo EERsơ đồ thích hợp .
