Rails将params / arguments传递给ActiveRecord回调函数
我在其中一个AR型号中有以下代码段:
after_update :cache_bust
模型中的cache_bust
方法接受一个参数(布尔值),默认情况下将其值设置为false
。
如何从上面定义的ActiveRecord回调中将true
传递给模型中的this方法呢?
例如: after_update :cache_bust(true)
不起作用,因为它是一个符号,我怎样才能将true
传递给方法的参数?
回调宏接受四种类型的回调:方法引用(符号),回调对象,内联方法(使用proc)和内联eval方法(使用字符串)。
试试这个?
after_update -> { cache_bust(true) }
根据您的说明,您可以使用可选的方法参数来实现您正在寻找的内容,如下所示:
def cache_bust(callback = true) ... method body end
在从after_update
回调调用方法的方案中,不传递参数,但默认为true。 否则,如果从其他任何地方“手动”调用该方法,您可以选择将任何值传递给该方法。
从控制器到回调很容易传递params,你可以在模型中调用params的名字。 例:
在控制器中:
Quiz.create(name: 'abc')
在模型中:
before_create :valid_name? def valid_name? puts name end
简短的回答是不。你不能传递任何论据。 您可以使用attr_accessor创建虚拟属性并设置该属性。