本文介绍了如何使用 if 语句为 Ruby on Rails 中的多个更改字段创建回调?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个 before_save 回调,该回调仅在三个字段(街道、城市、州)中的任何一个(但不一定全部)发生更改时才会运行.你怎么做到这一点?谢谢

I would like to create a before_save callback that only gets run if there have been changes to any (but not necessarily all) of the three fields (street, city, state). How do you do this? Thanks

用户.rb

class User
  before_save :run_test_method, :if => street_changed?

  ...
end

推荐答案

选项一

您可以创建一个方法,如:

You could create a method like:

def ok_to_run_test_method?
  street_changed? || something_changed? || something_else_changed?
end

然后使用:

before_save :run_test_method, :if => :ok_to_run_test_method?

注意如何 :ok_to_run_test_method? 是一个符号.不确定这是不是打字错误,但在您的问题中,您实际上是在调用 class 方法 street_changed?.

Note how :ok_to_run_test_method? is a symbol. Not sure if it was a typo or not but in your question you are actually calling a class method street_changed?.

方案二

稍微现代化您的回调并使用块样式语法:

Modernise your callbacks a little bit and use the block-style syntax:

before_save do
  if street_changed? || something_changed? || something_else_changed?
    # whatever you currently have in #run_test_method
  end
end

这篇关于如何使用 if 语句为 Ruby on Rails 中的多个更改字段创建回调?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-23 19:45