我想在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?
這是一個微妙的差異,但似乎是一個完美的解決方案。