【问题标题】:How to get update parameters in the Active Record model's callbacks?如何在 Active Record 模型的回调中获取更新参数?
【发布时间】:2023-03-29 02:49:01
【问题描述】:

是否可以获得已分配/更新的参数列表?

我不想从before_save回调中获取更改的属性列表,而是通过任何方式分配的属性列表(直接分配然后保存或通过update_attributes方法)。

谢谢!

更新

例如:

p = Person.new( name: 'Bob')
p.update_attributes( {:name, 'Bob'} )

update_attributes之后的回调中:

name_changed? # return false

我想获取分配属性的列表,例如:

attr_assigned # returns something like {:name => 'Bob'} or so

更新 2:

这是我的模型的现场会议

wl = WhiteLabel.last
wl.footer_text # "dfgdfgdfgdf"
wl.footer_text = "dfgdfgdfgdf"
wl.save

147: def on_subscription_update
148:    return if !valid? || back
149: 
=> 150:     binding.pry
151: 
152:    filter_out_postponed_attributes
153:    create_new_card_from_token      if stripe_card_token.present?
154:    update_subscription                 if user.stripe_customer_id && (subscription_type_id_changed? || !subscription_token)
155:    session_store = nil if last_step?
156: end

changed # []
changes # {}

我也试过wl.update_attributes({ :footer_text => "dfgdfgdfgdf"} )。结果一样

我是否遗漏了文档中的某些内容?

【问题讨论】:

  • 请阅读我链接的文档。方法#changed 为您提供了您正在寻找的答案。

标签: ruby-on-rails activerecord model callback


【解决方案1】:

ActiveModel::Dirty 模块提供的功能让您可以访问更改后的属性。

record.changes        # => {"name" => ["Bill", "Bob"]}

你也可以测试单个属性

record.name = 'Bob'
record.changed?       # => true
record.name_changed?  # => true
record.name_changed?(from: "Uncle Bob", to: "Bob") # => true
record.name_was       # => "Uncle Bob"
record.name_change    # => ["Uncle Bob", "Bob"]
record.name = 'Bill'
record.name_change    # => ["Uncle Bob", "Bill"]

【讨论】:

  • 谢谢你,西蒙娜!但我正在寻找允许我这样做的功能:
  • 我在我的问题中添加了一些示例
  • 请阅读我链接的文档。方法#changed 为您提供了您正在寻找的答案。
【解决方案2】:

基本上,当您执行 update_attributes 时,它会将您请求的更改提交到数据库中,因此更改数组变为空。如果您想在这种情况下跟踪更改,请在保存回调之前使用它会告诉您所有更改。

【讨论】:

  • 谢谢!我实际上试图跟踪 before_save 回调的变化。你指的具体方法是什么?
  • 如果您只想检查是否有任何字段更改,则使用更改的函数,它将返回数组。如果你想要值然后使用更改它返回哈希值从到到更改。
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多