gpt4 book ai didi

ruby-on-rails - 调用保存时触发 Rails belongs_to

转载 作者:行者123 更新时间:2023-12-03 22:39:44 25 4
gpt4 key购买 nike

假设我有 User 1-n 和 UserNotification

问题是我不知道为什么每次我尝试保存 UserNotification 时,rails auto SELECT 那个 UserNotification 的用户触发了 n + 1 个问题

例如

UserNotification.where(id: [1,2,3]).update(updated_at: Time.current)

将生成这些SQL

 UserNotification Load (0.4ms)  SELECT `user_notifications`.* FROM `user_notifications` WHERE `user_notifications`.`id` IN (1, 2, 3)
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (3, 1)
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 4

UserNotification 模型很简单 belongs_to :user

我已经阅读了更新源代码,但仍然没有头绪

有什么想法吗?

最佳答案

问题是 Rails 5 默认情况下属于 required。然后每次更新记录时,它都会加载关联以验证其存在。您可以做的(我不知道这有多干净,但在 Rails 修复它之前我想它没问题)是添加一个自定义验证来验证属于存在,以便它仅在创建或更改关联记录时运行。

belongs_to :my_association, optional: true
validate :my_association, presence: true, if: :needs_validate_my_association_presence?

def needs_validate_my_association_presence?
new_record? || my_association_id_changed?
end

在你的情况下 my_association 将是 user

关于ruby-on-rails - 调用保存时触发 Rails belongs_to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46700161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com