簡體   English   中英

在Rails中使用遷移關聯兩個表

[英]Relating two tables with migration in Rails

目標

users表與users_photos表相關聯。

問題

我只是不知道該怎么做。

場景

這是我表達的用於創建users_photos表的命令行:

rails generate migration CreateUsersPhotos image_url:string thumbnail_url:string user:references

它創建索引user_id ,但沒有任何外鍵。 我聽說Rails不會創建外鍵,因為SQLite不支持該功能。 它繼續,對嗎? 也許外國人可以幫忙吧?

關鍵是:當我生成遷移並執行rake db:migrate ,會創建任何模型。 換句話說,只創建表,我無法與模型交互以向其添加外鍵。

畢竟,問題是什么?

  1. 當我運行rake db:migrate ,它不會創建模型。 為什么?
  2. 如何將外鍵添加到users_photos 刪除用戶時,我需要刪除user_photo的條目。
  1. 遷移不會創建模型。 運行rails generate model UserPhotos ...以創建遷移和模型。 否則,您需要手動創建模型。 不要擔心外鍵,沒有它們的軌道處理關聯就好了。

  2. 我個人更喜歡在遷移中執行user_id:integer ,但是你擁有它的方式應該可行。 如果要將新模型記錄與其父項一起刪除,請使用

     # User model has_many :user_photos, dependent: :destroy` 

遷移和模型。 遷移與數據庫模式有關:表,行和所有內容。 因此,rake db:migrate不會為您創建任何模型。 你需要自己做。 例如,像這樣:

rails generate model User name:string

它將為您生成適當的模型和遷移(該遷移包含生成“用戶”表的代碼)。

外鍵。 你是對的。 Rails不會創建外鍵。 無論如何,有幾種方法(raw sql)。 但這些都是糟糕的選擇 你可以做的是將這種邏輯 (刪除相關記錄) 放在模型中 這是Rails協會指南鏈接 您可以通過以下方式聲明性地聲明刪除關聯記錄:

class User < ActiveRecord::Base
  has_many :photos, dependent: :destroy
end

您可以指定外鍵,如用戶有很多帖子,但在帖子中它保存為author_id

class User < ActiveRecord::Base
has_many :posts, dependent: :destroy, :foreign_key => :author_id
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM