在select语法中使用begin和rescue

时间:2014-02-27 03:30:41

标签: ruby-on-rails ruby

我想在以下代码中选择不会出现异常的task, 我怎么能得到它?

如果任务状态包含pid且进程正在我的系统上运行, 那么它就不会有例外。

这个代码在我的帮助函数中,我应该将一些函数移动到Model吗? (我正在使用ROR)

  def sanitize_running_tasks(tasks)

    sanitized_tasks = tasks.select do |task|
      begin
        Process.kill 0, task.status.to_i
      rescue Exception => e
        task.status = :FAIL
        task.save
      end
    end
  end

1 个答案:

答案 0 :(得分:0)

请考虑将kill方法放在任务上。

  def sanitize_running_tasks(tasks)
    tasks.select &:kill
  end

  class Task
    def kill
      Process.kill 0, status.to_i
      true
    rescue Exception => e
      mark_failed!
      false
    end

    def mark_failed!
      update_attributes status: :FAIL
    end
  end