处理Rails中的ruby中的异常

时间:2018-10-26 06:28:04

标签: ruby-on-rails ruby exception

我在worker的模型内部调用了方法@txt.watch,在watch()内部有一个parameters(parameters = self.parameters)数组。每个参数都有唯一的参考ID。 我想从worker内部挽救每个参数的每个异常错误。

 class TextWorker
    def perform(id)
      @txt = WriteTxt.find(id)
      begin
        @txt.watch
        total_complete_watch = if @txt.job_type == 'movie'
                                @txt.total_count
                              else
                                @txt.tracks.where(status:'complete').size
                              end
        @txt.completed = total_completed_games
        @txt.complete = (total_complete_games == @txt.total_count)
        @txt.completed_at = Time.zone.now if @txt.complete
        @txt.zipper if @txt.complete
        @txt.save
        FileUtils.rm_rf @txt.base_dir if @txt.complete
      rescue StandardError => e
        #How to find errors for each reference_id here
      raise e
      end
    end
  end

有什么办法可以做。非常感谢你。

1 个答案:

答案 0 :(得分:1)

我假设self.parameters在您的Model类实例中。在这种情况下,请执行以下操作,您可以引用它们。

begin
  @txt.watch
rescue StandardError
  p @parameters  # => self.parameters in the Model context
  raise
end

注意

根据经验,建议将救援范围限制为尽可能狭窄。不要在主子句中包含不应引发Exception的语句(例如@txt.saveFileUtils.rm_rf)。而且,最好限制一个异常的类别。例如,抢救Encoding::CompatibilityError而不是EncodingError,或者抢救EncodingError的{​​{1}},依此类推。或者,更好的方法是定义自己的Exception类并故意引发它。