Làm thế nào để đường ray biết đó user_id
là một tham chiếu khóa nước ngoài user
?
Bản thân Rails không biết đó user_id
là một tham chiếu khóa ngoại user
. Trong lệnh đầu tiên, rails generate model Micropost user_id:integer
nó chỉ thêm một cột user_id
tuy 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 Micropost
mô hình
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
các từ khóa belongs_to
và has_many
xác định mối quan hệ giữa các mô hình này và khai báo user_id
là khóa ngoại đối với User
mô hình.
Lệnh sau rails generate model Micropost user:references
thêm dòng belongs_to :user
trong Micropost
mô 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 Workbench
bạ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 EER
sơ đồ thích hợp .