如何在项目范围内提供lib模块方法,并且还特定于Ruby on Rails中的类?

时间:2012-09-22 23:01:18

标签: 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 +。

谢谢!

1 个答案:

答案 0 :(得分:1)

要将Utility方法作为另一个类中的类方法使用,请使用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

如果要为类的实例提供Utility方法,请使用include:

class Widget
  include Utility
end

widget = Widget.new
widget.current_server_host