关联的级联更新

问题描述 投票:1回答:1

我有一个类Yojana和另一个类Kabuliyat,其中Kabuliyat属于Yojana,而Yojana有一个kabuliyat。

class Yojana < ApplicationRecord
  has_one :kabuliyat, dependent: :destroy
end
class Kabuliyat < ApplicationRecord
  belongs_to :yojana
end

[kabuliat实例的某些字段/属性取决于yojana实例的属性。

例如,

新喀布尔雅特]的部分形式。

- @yojana = Yojana.find_by_id(params[:yojana_id]) = form_for kabuliyat do |f| tr td = f.label :yojana_name td = f.text_field :yojana_name, {value: @yojana.yojana_name,class: "hide-input",:readonly => true} tr td = f.label :mukhya_samiti td = f.text_field :mukhya_samiti, {value: @yojana.mukhya_samiti,class: "hide-input",:readonly => true}
您可以看到,kabuliyat实例的属性,例如

:yojana_name

:mukhya_samitit是从其父yojana实例属性中提取的。

问题:

[我想知道,如果我保存了kabuliyat的实例,然后编辑了Kabuliyat属性所依赖的Yojana实例,那么我又如何能够反映出kabuliyat实例的更改。

例如

:如果我将Yojana实例的名称从“ A”更改为“ B”,此更改是否可以自动反映在子实例kabuliyat的属性(例如yojana_name)上。

我尝试过的:

我在

Yojana.rb

模型类中使用了before_update回调,并手动将其更改为Yojana上所有其他依赖的类。我想知道是否还有其他有效的方法。
我有一个班级Yojana和另一个班级Kabuliyat,其中Kabuliyat属于Yojana,而一个Yojana有一个kabuliyat。类Yojana

您可以在after_update模型中添加Yojana回调

after_update :update_kabuliyat def update_kabuliyat return unless yojana_name_changed? || mukhya_samiti_changed? kabuliyat.update(yojana_name: yojana_name, mukhya_samiti: mukhya_samiti) end

尝试一下。
ruby-on-rails ruby associations
1个回答
0
投票
您可以在after_update模型中添加Yojana回调
© www.soinside.com 2019 - 2024. All rights reserved.