gpt4 book ai didi

ruby-on-rails - Rails嵌套的属性子回调未触发

转载 作者:行者123 更新时间:2023-12-03 11:48:20 27 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,即在更新父级时不会触发子级回调...

我有以下模型设置:

class Budget < ActiveRecord::Base
has_many :line_items
accepts_nested_attributes_for :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :budget

before_save :update_totals

private
def update_totals
self.some_field = value
end
end

在我的表单中,我嵌套了字段(使用 fields_for构建):
= form_for @budget do |f|
= f.text_field :name
= f.fields_for :line_items do |ff|
= ff.text_field :amount

为什么子级上的 update_totals回调从未触发过/如何使它触发?

最佳答案

我遇到过同样的问题。不更改模型时不调用before_save回调。

您正在更新line_items,而不是budget,因此Rails认为它没有更新,因此不会为其调用save

您需要将before_save更改为after_validation,以便即使模型没有更改的属性也会被调用。当在此回调中更改某些属性时,Rails将看到您的模型已更改,并将调用save

关于ruby-on-rails - Rails嵌套的属性子回调未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9358520/

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