วิธีการที่ไม่รางรู้ว่าuser_id
เป็นอ้างอิงที่สำคัญต่างประเทศuser
?
Rails ตัวเองไม่ได้รู้ว่าเป็นอ้างอิงต่างประเทศที่สำคัญuser_id
user
ในคำสั่งแรกrails generate model Micropost user_id:integer
นั้นจะเพิ่มเฉพาะคอลัมน์user_id
แต่รางไม่ทราบการใช้คอลัมน์ คุณต้องวางสายในMicropost
โมเดลด้วยตนเอง
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
คำหลักbelongs_to
และhas_many
กำหนดความสัมพันธ์ระหว่างโมเดลเหล่านี้และประกาศuser_id
เป็นคีย์ต่างประเทศต่อUser
โมเดล
คำสั่งในภายหลังrails generate model Micropost user:references
เพิ่มบรรทัดbelongs_to :user
ในMicropost
รูปแบบและขอประกาศว่าเป็นกุญแจต่างประเทศ
FYI การ
ประกาศคีย์ต่างประเทศโดยใช้วิธีการแบบเดิมช่วยให้ Rails ทราบเกี่ยวกับความสัมพันธ์ที่โมเดล / ตารางมี ฐานข้อมูลไม่ทราบเกี่ยวกับความสัมพันธ์ ดังนั้นเมื่อคุณสร้างไดอะแกรม EER โดยใช้ซอฟต์แวร์เช่นMySql Workbench
คุณพบว่าไม่มีเธรดที่สัมพันธ์กันระหว่างโมเดล ชอบในรูปต่อไปนี้
อย่างไรก็ตามหากคุณใช้วิธีการในภายหลังคุณจะพบว่าไฟล์การโยกย้ายของคุณมีลักษณะดังนี้:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
ตอนนี้คีย์ foreign ถูกตั้งค่าที่ระดับฐานข้อมูล และคุณสามารถสร้างEER
ไดอะแกรม
ที่เหมาะสม