在Rails中扩展内置类功能的最佳位置在哪里?

时间:2010-06-28 18:06:45

标签: ruby-on-rails

我为Rails应用程序添加了Ruby的Array类的一些方法。放置它们的最佳位置在哪里?

现在我将它们放在config / environment.rb中。

2 个答案:

答案 0 :(得分:7)

config / environment.rb实际上不是最好的地方,因为如果尝试扩展在环境中执行时尚未解析的类,可能会遇到严重的加载排序问题。

最好将文件放入config / initializers。任何放置在那里的脚本都将在加载rails运行时后执行。

您可以做的是创建一个文件lib / my_extensions.rb

module MyExtensions
end

然后在lib / my_extensions / array.rb中:

module MyExtensions::Array 
  def join_with_commas
    join(", ")
  end
end

和config / initializers / load_my_extensions.rb

class Array
  include MyExtensions::Array
end

每次在开发模式下调用请求时,都会自动重新加载MyExtensions :: Array。这比每次更改代码时重启应用程序都要好。

答案 1 :(得分:1)

添加一个包含所有扩展名的lib/目录可能会更清晰。然后在config / environment.rb中添加一行加载文件:

require File.join(RAILS_ROOT, 'lib', 'array.rb')