Rails pass params/arguments to ActiveRecord callba

2020-06-01 06:22发布

I have the snippet below in one of my AR models:

after_update :cache_bust

The cache_bust method in the model accepts a parameter (boolean) that sets the value of itself to false by default.

How can I pass true to this method in the model from my ActiveRecord callback defined above it?

Ex: after_update :cache_bust(true) does not work because it's a symbol, how can I pass true to the method's param?

4条回答
我命由我不由天
2楼-- · 2020-06-01 06:42

Short answer is No.You cannot pass any arguments. You could use attr_accessor to create a virtual attribute and set that attribute.

查看更多
The star\"
3楼-- · 2020-06-01 06:49

There are four types of callbacks accepted by the callback macros: Method references (symbol), callback objects, inline methods (using a proc), and inline eval methods (using a string).

Try this?

after_update -> { cache_bust(true) }
查看更多
虎瘦雄心在
4楼-- · 2020-06-01 07:03

Very easy to pass params from controller to callback, you can call name of params in model. Example:

In controller:

Quiz.create(name: 'abc')

In model:

before_create :valid_name?

def valid_name?
  puts name
end
查看更多
够拽才男人
5楼-- · 2020-06-01 07:09

Based on your clarification, you can achieve what you're looking for by using optional method parameters, like so:

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

In the scenario where the method is called from the after_update callback, the parameter is not passed, but defaults to true. Otherwise, if the method is called from anywhere else "manually", you have the option of passing whatever value you wish to that method.

查看更多
登录 后发表回答