如何使 lib 模块方法在项目范围内可用,并且特定于 Ruby on Rails 中的类



例如,我想创建一个current_server_host方法,该方法返回应用程序当前正在运行的当前主机。

lib/utility.rb:

module Utility
  def current_server_host
    request.env['HTTP_HOST']
  end
end

如何使其在整个项目范围内可用,我不需要包含任何内容,但可以通过Utility.current_server_host调用?

如何使其特定于需要调用include的类(模型/控制器/视图)?

请回答 RoR 3.2+。

谢谢!

若要使实用工具方法可用作另一个类中的类方法,请使用 extend:

class Widget
  extend Utility
end
# provides
Widget.current_server_host

Ruby 模块可以像扩展类一样扩展自身:

module Utility
  extend self
  def current_server_host
    request.env['HTTP_HOST']
  end
end
# provides
Utility.current_server_host

如果要为类的实例提供实用工具方法,请使用包括:

class Widget
  include Utility
end
widget = Widget.new
widget.current_server_host

最新更新