我想在rails应用程序中做一个before_save有条件的,但它似乎并没有工作。有没有办法使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。
我想在rails应用程序中做一个before_save有条件的,但它似乎并没有工作。有没有办法使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。
你可以使用:如果
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
在Rails 5中,我已经成功地定义了一个包含布尔逻辑的私有方法,然后将它作为一个符号传递(最后一部分看起来像是一个要求)。换句话说:
before_save do_something, if: :private_boolean_method?
这是一个微妙的差异,但似乎是一个完美的解决方案。