簡體   English   中英

如何防止檢查父母是否存在對belongs_to

[英]How to prevent check if parent exists for belongs_to

ActiveRecord在保存或創建子記錄時會自動檢查父記錄是否存在。 有沒有辦法防止這種檢查?

例如

class Project
  has_many :projectitems
end

class Projectitem
  belongs_to :project
end

如果現在執行更新,則會在日志文件中看到:

Project Load (0.1ms)  SELECT  `projects`.* FROM `projects` WHERE `projects`.`id` = 49 LIMIT 1
Projectitems Update (0.2ms)  UPDATE `projectitems` SET .....

我不需要對父記錄進行檢查。 我知道它在那里,這個額外的請求只會導致不必要的數據庫負載。

Rails 5要求:belongs_to關聯默認存在。 您看到的額外檢查是驗證,以確保您的項目仍然存在。

如果要關閉此行為,可以指定該關系是可選的:

class Projectitem
  belongs_to :project, optional: true
end

如果要執行此操作,則可能需要一些額外的保護措施,以確保Projectitems不會被“孤立”。 例如,如果您刪除一個Project ,則您可能還希望刪除所有關聯的項目項:

class Project
  has_many :projectitems, dependent: :destroy
end

另外,您可能希望在數據庫層將projectitems.project_id標記為外鍵,這可以提供與Rails默認驗證相同的保護級別,但對所有客戶端而言(如果您的Rails應用程序不是唯一的,則特別有用)應用程序以連接到數據庫)。

另一個選擇(也是我個人推薦的選擇)是不使用Rails的默認設置。 當您的其他數據庫事務非常簡單時,服務器上的負載似乎不成比例,但這確實非常快,而且速度很慢。 但是,隨着您添加更多字段和索引,您的更新可能會隨着時間增長。

暫無
暫無

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

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