首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails回调:在回调中使用if多次作为条件回调

Rails回调:在回调中使用if多次作为条件回调
EN

Stack Overflow用户
提问于 2014-08-28 05:30:23
回答 4查看 4.1K关注 0票数 5

我正在使用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的内容。

EN

回答 4

Stack Overflow用户

发布于 2016-12-06 02:01:33

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

代码语言:javascript
复制
after_save :after_save_method, if: :first_condition_and_second_condition?

private

def first_condition_and_second_condition?
  first_condition? && second_condition?
end
票数 5
EN

Stack Overflow用户

发布于 2017-03-07 18:59:34

您可以使用Proc来实现此目的。

代码语言:javascript
复制
after_save :after_save_method, :if => Proc.new{ first_condition? && second_condition? }
票数 5
EN

Stack Overflow用户

发布于 2015-03-04 12:31:07

正如@tristanm here所说的,你可以这样做:

代码语言:javascript
复制
before_save do
  if first_condition? && second_condition?
    after_save_method
  end
end

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25537260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档