[英]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.