用许多条件重构一个大方法 - Ruby

时间:2017-07-15 17:31:33

标签: ruby-on-rails ruby

我有这个方法:

方法

  def unassigned_workers?(users)
    assigned_users = []
    unassigned_users = []

    users.each do |user|
      if user.designated_to_assignment?(self)
        assigned_users << user
      else
        unassigned_users << user
      end
    end

    if unassigned_users.count > 0
      true
    else
      false
    end
  end

它在我的Assignment模型中。赋值模型有很多Users,基本上这个方法尝试做的是检查用户是否根据我设置的另一个关系指定给赋值。它检查用户是否已分配并将其推送到正确的阵列上。有谁知道如何重构这个更小,更可读?

2 个答案:

答案 0 :(得分:2)

不确定你为什么要分配用户 尝试:

  def unassigned_workers?(users)
    users.reject { |user| user.designated_to_assignment?(self) }.count > 0
  end

reject从集合中删除与谓词匹配的元素。

此外,在模型中传递self作为参数是代码气味,也许依赖性是相反的

答案 1 :(得分:2)

如何使用any?

assigned_users不一定是必需的。

 def unassigned_workers?(users)
    users.any? { |user| !user.designated_to_assignment?(self) }
 end