美文网首页Ruby & Rails
小心 has_one 关系的 create,after_save

小心 has_one 关系的 create,after_save

作者: 云莉6 | 来源:发表于2018-02-02 19:43 被阅读0次
class Order < ApplicationRecord
    has_one :offer_screenshot
end

class OfferScreenshot < ApplicationRecord
    belongs_to :Order
end

这种 has_one 的关系,如果使用

order = Order.find(1)
order.create_offer_screenshot

这里会发生的事情是 rails 会自动帮你把 OfferScreenshot 中的 order_id 设置成 orderid 也就是 1如果这是第一次创建这个 orderOfferScreenshot,那么只会有一次 insertdb 操作。如果之前 这个 order 有了一个 OfferScreenshot,而现在要重新 create 一个的话,就会有 insertupdate 两次 db 操作。insert 还是同样的创建一个 order_id = 1OfferScreenshotupdate 则是把原来的 OfferScreenshotorder_id 置成 nil

所以,如果要在 model 上加 call back 的话,最好加在 after_commit 这样的 db commit 过的操作上,如果只是希望 after_create 而并不需要在 after_update 也 call back 的话,最好不要使用 after_save,因为像这样 order.create_offer_screenshot 就会出现两次 call back(一次 create,一次 update),这样就有可能造成很隐秘的 bug。而更建议的是使用 after_create_commit 而不是 after_create

image

相关文章

网友评论

    本文标题:小心 has_one 关系的 create,after_save

    本文链接:https://www.haomeiwen.com/subject/btoezxtx.html