无法访问模块中定义的自定义例外

时间:2013-11-15 20:09:44

标签: ruby-on-rails ruby-on-rails-4

在我的lib文件夹中,我有一个文件image_helper_exception.rb。路径为lib/dibs_exception/image_exception/image_helper_exception.rb

在此文件中,我定义了所有图像异常

module DibsException
  module ImageException
     class ImageHelperException < Exception; end
     class InvalidEntityException < Exception; end
     class InvalidImageTypeException < Exception; end
     class InvalidImageVersionException < Exception; end
     class InvalidImageUrlException < Exception; end
     class ImageNotFoundException < Exception; end
  end
end

当缺少某些东西时,我会在应用程序的其他位置引发应用程序。使用它的文件image_resize.rb的路径是helpers / image_resize.rb

image_resize.rb看起来像这样。

module Helpers
  class ImageResize
    require 'RMagick'
    require 'aws/s3'
    require 'rvg/rvg'
    require 'mechanize'
    include Magick

    def initialize(abc)
       if abc
         raise DibsException::ImageException::InvalidEntityException.new("Entity is invalid.")
         #The above line raises a error 
         #NameError: uninitialized constant DibsException::ImageException::InvalidEntityException
       else
         raise DibsException::ImageException::ImageHelperException.new("ImageHelperException.")
         #The above line does not raise a error 
        end
    end

end

我想在application.rb中添加lib加载。

我无法理解为什么(Helpers::ImageResize.new(true))会引发此错误:NameError: uninitialized constant DibsException::ImageException::InvalidEntityException

但是这可以正常工作:Helpers::ImageResize.new(false)

为什么只加载第一个类。有人可以帮忙吗?要求不起作用。

1 个答案:

答案 0 :(得分:1)

Ruby不支持函数重载。 第二次初始化在解析时覆盖第一个。 所以只存在第二个功能。

这应该是神奇的。

def initialize(xyz=nil)
       raise DibsException::ImageException::InvalidEntityException.new("Entity is invalid.") if(xyz.blank?)
       raise DibsException::ImageException::ImageHelperException.new("ImageHelperException.")
       #This line DOES NOT raise error like above. It works fine.
end