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

mui*_*bot 4 ruby-on-rails

我有一些方法可以添加到Array我的Rails应用程序的Ruby 类中.放置它们的最佳位置在哪里?

现在我在config/environment.rb中有它们.

fli*_*ald 7

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

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

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

module MyExtensions
end
Run Code Online (Sandbox Code Playgroud)

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

module MyExtensions::Array 
  def join_with_commas
    join(", ")
  end
end
Run Code Online (Sandbox Code Playgroud)

在config/initializers/load_my_extensions.rb中

class Array
  include MyExtensions::Array
end
Run Code Online (Sandbox Code Playgroud)

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