gpt4 book ai didi

ruby-on-rails - 如何结合 Rails 中的创建和更新操作?

转载 作者:行者123 更新时间:2023-12-02 01:39:00 25 4
gpt4 key购买 nike

在我的 Rails 4 应用程序中,我有这个 Controller :

class InvoicesController < ApplicationController

...

def create
@invoice = current_user.invoices.build(invoice_params)
@invoice.build_sender(current_user.profile.sender_fields) # <= !
if @invoice.save
flash[:success] = "Invoice created."
redirect_to invoices_path
else
render :new
end
end

def update
if @invoice.update_attributes(invoice_params)
@invoice.sender.update_attributes(current_user.profile.sender_fields) # <= !
flash[:success] = "Invoice updated."
redirect_to invoices_path
else
render :edit
end
end

...

end

基本上,当 invoice 创建时,它会做什么,它还会创建一个关联的 sender 记录,其中主要包含发票的抬头数据,例如公司名称、地址、等

更新发票时,其关联的发件人记录也会更新。

我只是想知道是否可以使用过滤器或类似 create_or_update() 或类似功能的函数将其组合到模型中?

感谢您的帮助。

最佳答案

这种约束:

Create/update an associated object B on each create/update of Model A

应该由模型 A 持有。如果明天您需要另一个页面来创建模型 A 的实例,则不必在两个 Controller 的操作中执行相同的逻辑,因为模型 A 负责创建关联实例( s) 模型 B.


因此,在您的情况下,您可以在 Invoice 模型中组合 after_createafter_save:

after_create :create_or_update_sender
after_update :create_or_update_sender

def create_or_update_sender
local_sender = (self.sender || self.build_sender)
local_sender.update_attributes(self.user.profile.sender_fields)
local_sender.save!
end

关于ruby-on-rails - 如何结合 Rails 中的创建和更新操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29497862/

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