Ric*_*ard 5 conditional if-statement ruby-on-rails callback
我正在使用Rails 3.2.19,if在回调中使用多个条件作为条件时遇到问题。
以下混合双条件有效(评估first_condtion和second_condition)
after_save :after_save_method, unless: :first_condition?, if: :second_condition?
但是,如果我使用两个if条件,则after_save_method每次都会执行。(似乎只采取了最后的条件)
after_save :after_save_method, if: :first_condition?, if: :second_condition?
我还尝试将两个条件与'&&'结合使用,但没有用。
after_save :after_save_method, if: :first_condition? && :second_condition?
为什么不能if多次使用?
apidoc在http://edgeguides.rubyonrails.org/active_record_callbacks.html#multiple-conditions-for-callbacks中提供了一个if和if的示例,但没有说明不允许两个“ if ”。
为此,我的解决方案是将所有必要的代码放入一个方法中,并仅对该方法进行求值,但我只是想确保这些if内容。
正如@tristam 所说,你可以这样做:
before_save do
if first_condition? && second_condition?
after_save_method
end
end
Run Code Online (Sandbox Code Playgroud)
这是@tristam 建议的选项之一,如果您想要其他选项,请检查他的答案。
我建议你创建一个知道你想要的逻辑的私有方法:
after_save :after_save_method, if: :first_condition_and_second_condition?
private
def first_condition_and_second_condition?
first_condition? && second_condition?
end
Run Code Online (Sandbox Code Playgroud)
小智 5
为此,您可以使用 Proc。
after_save :after_save_method, :if => Proc.new{ first_condition? && second_condition? }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2952 次 |
| 最近记录: |