ruby-on-rails-4 – Rails4:如何在使用accepts_nested_attributes_for时触发attr_accessor的回调

ruby-on-rails-4 – Rails4:如何在使用accepts_nested_attributes_for时触发attr_accessor的回调,第1张

概述请检查伪代码: class Team has_many :users accepts_nested_attributes_for :users, allow_destroy: trueendclass User belongs_to :team has_many :addresses accepts_nested_attributes_for :addresses a 请检查伪代码:

class Team  has_many :users  accepts_nested_attributes_for :users,allow_destroy: trueendclass User  belongs_to :team  has_many :addresses  accepts_nested_attributes_for :addresses  attr_accessor :dummy  before_valIDation :generate_addresses_attributes  def generate_addresses_attributes    # Use the dummy value to set the addresses_attributes  endend

现在执行team.update(users_attributes:[{“0”=> {dummy:“changed!”}}])(其他字段除了dummy属性外不会改变),它不会触发#generate_addresses_attributes回调它认为没有任何变化,没有保存,没有回调……

所以我的问题是如何触发虚拟属性的回调,或者强制save为accepts_nested_attributes_for.

谢谢!

解决方法 最后,我找到了两个解决方案:

>在Team模型中添加回调以手动触发回调功能
>使用attribute_will_change!覆盖setter方法:

class User  belongs_to :team  has_many :addresses  accepts_nested_attributes_for :addresses  attr_accessor :dummy  def dummy=(value)    attribute_will_change!("dummy") if @dummy != value    @dummy = value  end  ...end
总结

以上是内存溢出为你收集整理的ruby-on-rails-4 – Rails4:如何在使用accepts_nested_attributes_for时触发attr_accessor的回调全部内容,希望文章能够帮你解决ruby-on-rails-4 – Rails4:如何在使用accepts_nested_attributes_for时触发attr_accessor的回调所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存