gpt4 book ai didi

ruby-on-rails - 确保在保存并创建主模型后创建或保存关联 Rails 4

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:09 25 4
gpt4 key购买 nike

我有这两个模型如下

class Application < ActiveRecord::Base
has_many :commitments, class_name: "Commitment", \
:source => :application, dependent: :destroy
accepts_nested_attributes_for :commitments

after_create: update_case_code

end

class Commitment < ActiveRecord::Base
belongs_to :application
after_create: send_notification

def send_notification
ap self.application.case_code
end
end

class ApplicationsController < ApplicationController
def create
@application = Application.new(params)
@application.save
end
end

在我的 application_controller 中,每当我创建一个新的应用程序记录时,也会在 promise 中创建一个新记录,它会尝试从应用程序记录中获取 case_code,但是应用程序模型的 after_create 方法还没有被执行了。

有什么方法可以优化这段代码使其正常工作吗?

最佳答案

应该是吧。也许您还可以在应用程序模型上使用之前发生的另一个回调,它们有很多。参见 Active Record Callbacks

然而事实确实如此,其他人称之为 rails callback hell

这里的最佳实践是只创建一个表单对象,它按照您需要的顺序创建数据并删除回调

class ApplicationCommitmentForm
include ActiveModel::Model


attr_accessor ...

def submit
a = Application.create ..
a.update_case_code
a.commitments.create ...
end


end

参见 ActiveModel Form Objects

顺便说一句,您还可以将提交代码包装到事务中,以确保创建所有记录,或者在出现任何错误的情况下什么也没有。

关于ruby-on-rails - 确保在保存并创建主模型后创建或保存关联 Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672595/

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