3

因此,我没有遇到太多问题,因为我对在网络上看到的用于更改 Rails 配置文件的两种不同约定感到困惑。

具体来说,我经常看到这两个语句:

config.autoload_paths << "#{Rails.root}/app/arbitrary"
config.autoload_paths += %W(#{config.root}/app/arbitrary)
config.autoload_paths += Dir["#{config.root}/app/arbitrary/**/"]

<<首先,使用运算符与运算符有什么区别+=吗?Rails.root其次,与 相比,使用它是否被认为是一种更好的做法config.root

这些约定中的一些是否只能用于某些组合?我只是讨厌不知道一些看似基本的东西。

4

2 回答 2

1

<<和之间的区别+=

config.autoload_paths是一个数组。对于 Array 对象,<<将 ONE 对象推送到数组中,同时+连接两个数组以创建一个新数组。因此,如果您只有一个对象要附加到现有数组,<<则优先考虑性能,因为不会创建新对象。如果要将另一个数组附加到现有数组,则必须使用+.

你知道,a1 =+ a2等于a1 = a1 + a2

Rails.root对比config.root

Rails.root只是 Rails 应用程序的根。如果config.root在 Rails 应用程序中使用,它应该与Rails.root. 但它也可以在引擎中使用,它将成为引擎的根。如果config.root在 Rails 应用程序中使用,您可能无需更改它以将应用程序用作引擎。

于 2012-11-29T10:02:56.570 回答
0

<<添加一个值,同时+=添加一个值数组。该%w(...)符号只是字符串数组的快捷方式。

检查Rails.root方法的来源: https ://github.com/rails/rails/blob/master/railties/lib/rails.rb#L83

所以它config.root无论如何都会使用,因为

Rails.application.config == Rails.configuration

评估为true。这也是您为 config/application.rb 和 config/environments/ 文件中的配置块传递的对象。

于 2012-11-29T10:04:43.513 回答