有没有办法使before_save有条件?

时间:2011-06-20 10:38:53

标签: ruby-on-rails ruby

我试图在rails应用程序中创建一个有条件的before_save,但它似乎没有工作。

before_save method_call_to_run if self.related_model.some_method_that_returns_t_or_f?

如果'some_method_that_returns_t_or_f'返回true,我希望它在保存对象之前运行该方法,否则我只是想让它忽略before_save。

2 个答案:

答案 0 :(得分:55)

你可以使用:if

before_save do_something, :if => Proc.new {|model| model.some_boolean_attr_or_method }

或只是

before_save do_something, :if => some_condition

编辑:

快速参考,有一个很好的指南:

http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks

答案 1 :(得分:7)

Rails 5

我成功定义了一个包含布尔逻辑的私有方法,然后将其作为符号传递(最后一部分看起来像是一个要求):

before_save do_something, if: :private_boolean_method?

我最近也发现你可以简单地传递一个块(花了一些时间来弄清楚语法):

before_save do_something, if: -> { condition == "met" }