在rails app中为内置类添加方法

时间:2009-03-24 11:38:20

标签: ruby-on-rails ruby

我想在rails应用程序中向Array类添加一个方法。我应该把这个方法放在哪里?

编辑更清楚,显然我把它放在某处的文件中,但是如何告诉rails应用程序在哪里找到它?

3 个答案:

答案 0 :(得分:40)

执行此操作的一种方法是在lib/rails_extensions.rb创建文件。然后,像这样添加您的扩展程序:

class Array
  def bring_me_food
    # ...
  end

  def make_tea
    # ...
  end
end

class Hash
  def rub_my_shoulders
    # ...
  end
end

然后在config/environment.rb中添加:

require 'rails_extensions'

您对辅助对象的里程可能会有所不同。

答案 1 :(得分:6)

默认情况下,当你调用“require”时,Rails会查看(来自Rails边缘源):

应用 应用程序/金属 应用程序/模型 应用程序/控制器 应用程序/佣工 应用程序/服务 LIB 供应商

为简单起见,将文件放在lib /中,并在config / environment.rb中按名称输入,或者将其放在config / initializers / array_extension.rb中,它将自动加载。< / p>

在我工作的地方,我们将所有扩展核心Ruby库放入插件中,并将其存储在(Rails.root /)vendor / plugins / utilities / lib / core_ext中,然后我们需要个人插件的init.rb中的扩展名。

另一种修饰此cat的方法:如果您说,想要将您的核心扩展存储在Rails.root / core_ext中,那么您可以在environment.rb中的配置块中将该路径添加为加载路径:

Rails::Initializer.run do |config|
  config.load_paths << 'core_ext'
end

然后你可以从任何地方调用“require'sray_extension'”,它会加载。

答案 2 :(得分:0)

只需将其放入新文件中,例如array_extended.rb

class Array

  def my_new_method()
    ...
  end

end

之后,您可以将此文件包含在require "array_extended.rb"中。 请确保您不会覆盖现有方法,因为这可能会破坏其他功能。