Rails将params/arguments传递给ActiveRecord回调函数

Noa*_*oah 18 ruby activerecord ruby-on-rails

我在其中一个AR型号中有以下代码段:

after_update :cache_bust
Run Code Online (Sandbox Code Playgroud)

cache_bust模型中的方法接受一个参数(布尔值),该参数false默认设置自身的值.

如何true从我上面定义的ActiveRecord回调中传递给模型中的这个方法呢?

例如:after_update :cache_bust(true)不起作用,因为它是一个符号,我怎样才能传递true给方法的参数?

Nic*_*eys 29

回调宏接受四种类型的回调:方法引用(符号),回调对象,内联方法(使用proc)和内联eval方法(使用字符串).

试试这个?

after_update -> { cache_bust(true) }
Run Code Online (Sandbox Code Playgroud)


Pau*_*ter 5

根据您的说明,您可以使用可选的方法参数来实现您所需的功能,如下所示:

def cache_bust(callback = true)
    ... method body
end
Run Code Online (Sandbox Code Playgroud)

在从after_update回调调用方法的方案中,不传递参数,但默认为true.否则,如果从其他任何地方"手动"调用该方法,您可以选择将任何值传递给该方法.

  • 这回答了我在谷歌上搜索的实际问题。 (2认同)