簡體   English   中英

Rails:刪除所有關聯模型中的用戶和用戶關聯數據

[英]Rails: Delete user and user associated data in all associated models

我是 Ruby ON Rails 的新手,我的應用程序有 3 個模型

class User < ActiveRecord::Base
 has_one :user_hobby
 has_one :user_interest
end

class User_hobby < ActiveRecord::Base
  belongs_to :User
 end

class User_interest < ActiveRecord::Base
  belongs_to :User

 end

我想從模型和關聯數據中刪除特定用戶的所有記錄和關聯數據。

我試過:

@user = User.joins(:User_details,:User_record).where(user_id:'user_id')
@user.destroy

但不工作,我想不使用dependent: :destroy only from SQL

簡單地說,在使用任何關聯到模型時使用dependent

你可以這樣做:

class User < ActiveRecord::Base
 has_one :user_hobby, dependent: :destroy  # destroys the associated user_hobby
 has_one :user_interest, dependent: :destroy  # destroys the associated user_interest
end

如需更多了解,請訪問此鏈接

依賴

  • 控制關聯對象在其所有者被銷毀時發生的情況:

  • :destroy導致關聯的對象也被銷毀

  • :delete導致直接從數據庫中刪除關聯的對象(因此不會執行回調)

  • :nullify導致外鍵設置為 NULL。 不執行回調。

  • 如果有關聯記錄, :restrict_with_exception會導致引發異常

  • :restrict_with_error導致錯誤添加到所有者如果有關聯的對象

當您設置具有關聯的模型時,您還應該花時間設置回調來處理刪除孤立行。

class User < ActiveRecord::Base
  has_one :user_hobby, dependent: :destroy
  has_one :user_interest, dependent: :destroy
end

class UserHobby < ActiveRecord::Base
  belongs_to :user
end

class UserInterest < ActiveRecord::Base
  belongs_to :user
end

這將在每個關聯記錄上調用.destroy方法:

@user = User.find(1)
@user.destroy

另外@user = User.joins(:User_details,:User_record).where(user_id:'user_id')返回整個記錄集合 - 而不是單個記錄。 .where(user_id:'user_id')也是完全錯誤的,因為條件將適用於 users 表,並且您使用的是硬編碼的字符串文字'user_id' ,我懷疑它在列中。

如果您想要單個記錄,請使用.find.find_by方法。

@user = User.includes(:user_details, :user_record).find(params[:id])
@user.user_details.delete_all 
@user.user_record.delete if @user.user_record

如果是has_many關聯或記錄集合,則應使用.delete_all.destroy_all

但是正確設置關聯是一個更好的主意,因為模型應該負責 MVC 應用程序中的業務邏輯。

暫無
暫無

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

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