首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用保存时触发的Rails belongs_to

调用保存时触发的Rails belongs_to
EN

Stack Overflow用户
提问于 2017-10-12 09:51:14
回答 1查看 423关注 0票数 3

假设我的用户1-n使用UserNotification

问题是,我不知道为什么每次我尝试保存UserNotification时,rails都会自动选择该UserNotification的用户,从而触发n+1问题

例如

代码语言:javascript
运行
复制
UserNotification.where(id: [1,2,3]).update(updated_at: Time.current)

将生成这些SQL

代码语言:javascript
运行
复制
 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

用户模型很简单: belongs_to : UserNotification

我已经阅读了更新源代码,但仍然没有任何线索

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-10 04:02:45

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

代码语言:javascript
运行
复制
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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46700161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档