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

时间:2015-05-13 17:41:15

标签: ruby-on-rails ruby activerecord

我的AR模型中有以下代码段:

after_update :cache_bust

模型中的cache_bust方法接受一个参数(布尔值),默认情况下将其值设置为false

如何从上面定义的ActiveRecord回调中将true传递给模型中的此方法?

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

4 个答案:

答案 0 :(得分:23)

  

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

试试这个?

after_update -> { cache_bust(true) }

答案 1 :(得分:5)

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

def cache_bust(callback = true)
    ... method body
end

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

答案 2 :(得分:-2)

从控制器到回调很容易传递params,你可以在模型中调用params的名字。例如:

在控制器中:

Quiz.create(name: 'abc')

模特:

before_create :valid_name?

def valid_name?
  puts name
end

答案 3 :(得分:-5)

简短回答是否。你不能传递任何论据。 您可以使用attr_accessor创建虚拟属性并设置该属性。