2014-08-27 67 views
4

我正在使用Rails 3.2.19,并且在回调中使用多个if作为条件时遇到问题。Rails回调:在回调中作为条件回复使用

下混双条件作品(评估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,但没有说不允许两个“ifs”。

我的解决方案是将所有必要的代码放入一个方法中,只评估该方法,但我只想确保if的东西。

回答

3

如前所述通过@tristanm here你可以做这样的事情:

before_save do 
    if first_condition? && second_condition? 
    after_save_method 
    end 
end 

这是选择之一@tristanm建议,检查他的答案,如果你想要另一种选择。

2

我建议你创建它知道你想要的逻辑的私有方法:

after_save :after_save_method, if: :first_condition_and_second_condition? 

private 

def first_condition_and_second_condition? 
    first_condition? && second_condition? 
end 
1

值得一提的是,增加了两个独立的if:条件不工作,因为你正在传递什么作为参数传递给方法是选项的Ruby哈希。第二个if:覆盖第一个。

2

您可以使用Proc来达到此目的。

after_save :after_save_method, :if => Proc.new{ first_condition? && second_condition? }