有没有办法使before_save有条件?

Dar*_*ren 29 ruby ruby-on-rails

我试图在rails应用程序中使用before_save条件,但它似乎没有工作.

before_save method_call_to_run if self.related_model.some_method_that_returns_t_or_f?
Run Code Online (Sandbox Code Playgroud)

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

And*_*oni 56

你可以使用:if

before_save do_something, :if => Proc.new {|model| model.some_boolean_attr_or_method }
Run Code Online (Sandbox Code Playgroud)

或者干脆

before_save do_something, :if => some_condition
Run Code Online (Sandbox Code Playgroud)

编辑:

为了快速参考,有一个很好的指导:

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


sam*_*ker 8

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

__CODE__

这是一个微妙的差异,但似乎是一个优雅的解决方案.