在rails

时间:2016-09-20 17:31:51

标签: ruby conditional

这是在声明上施加条件的有效方法吗?前几天在一行中使用时,我无法使用多个&&&&&&&'s或||'

@sales_opportunities << auction unless auction.company == current_user || !(auction.bids & current_user.bids).empty? || !auction.condition.include?(part.condition)

2 个答案:

答案 0 :(得分:4)

一些想法:

  1. 您可以在“除非”
  2. 之后将多个条件放入一行
  3. 如果您这样做,您可能需要确认它们会返回正确的结果,即使是边缘情况(确保||或&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp; amp; LI>
  4. 尽管如此,这很难理解。我建议将这些条件拉出来并使每个条件成为自己的方法。这将使其更具可读性,如果您在其他地方需要这些条件,它将使您的代码更加干燥。

答案 1 :(得分:2)

@CaptainChaos和@PascalBetz说的是什么。至少,将该条件的一部分提取到具有描述性名称的本地变量。像这样:

insider_user     = auction.company == current_user
user_placed_bids = (auction.bids & current_user.bids).present?
part_matches     = auction.condition.include?(part.condition)

@sales_opportunities << auction unless insider_user || user_placed_bids || !part_matches

现在这看起来更易于管理,嘿?