簡體   English   中英

Rails關聯和刪除

[英]Rails associations and deletion

我正在通過Rails關聯鏈接 但是我不明白該協會是如何運作的。 我正在使用mysql db。

這些是我生成的文件:

user.rb

class User < ActiveRecord::Base
    has_many :orders
end

order.rb

class Order < ActiveRecord::Base
    belongs_to :user
end

20150911181301_create_orders.rb

class CreateOrders < ActiveRecord::Migration
  def change
    create_table :orders do |t|
      t.string :content
      t.integer :user_id

      t.timestamps null: false
    end
  end
end

20150911181351_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps null: false
    end
  end
end

首先,我期望db:migrate本身會生成一些外鍵關系,但沒有發生。 然后我認為可能是Rails在內部對其進行管理,但是當我通過rails c刪除用戶時,它沒有從訂單表中刪除相應的訂單。

我的理解在哪里不正確? 還給我一些鏈接,說明它是如何工作的?

這值得商but,但是傳統的“ Rails方式”是在ActiveRecord級別而不是數據庫中管理與模型相關的事情,例如默認值,外鍵和觸發器。

也就是說,您可以使用以下方法隨意添加外鍵以實現遷移中的參照完整性:

add_foreign_key :orders, :users

有關更多信息,請參見《 Rails指南》

在銷毀父對象時自動銷毀子對象的“導軌方式”是在子集合上指定:dependent策略。 有一個偉大的討論#1 這里進入詳細介紹兩個:dependent選項: :destroy VS :delete_all

一切都在文檔中

-您應注意,“ 在任何情況下,Rails都不會為您創建外鍵列 。您需要在遷移過程中明確定義它們。”

-您還應該注意,在關聯方面,Rails需要告訴您,與belongs_tohas_many相關聯的兩個模型,都希望在刪除其父模型時刪除關聯的模型。 那就是dependent: :destroy出現的地方。

現在,您需要執行的所有代碼才能使與用戶相關的orders在以下情況orders被刪除:

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

來源: Rails指南

暫無
暫無

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

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