所以,我没有遇到任何问题,因为我对Web上用于更改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
?
这些约定中是否只能在某些组合中使用?我只是讨厌不知道看似基本的东西。
答案 0 :(得分:1)
<<
和+=
config.autoload_paths
是一个数组。对于Array对象,<<
将ONE对象推送到数组,而+
连接两个数组以创建新数组。因此,如果只有一个对象要附加到现有数组,则<<
是性能的首选,因为不会创建新对象。如果要将另一个数组附加到现有数组,则必须使用+
。
哟知道,a1 =+ a2
等于a1 = a1 + a2
。
Rails.root
v.s. config.root
强>
Rails.root
只是Rails应用的根源。
如果在Rails应用中使用config.root
,则应与Rails.root
相同。但它也可以在引擎中使用,它将成为引擎的根源。如果在Rails应用中使用config.root
,您可能不必更改它以将该应用用作引擎。
答案 1 :(得分: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 / files中为配置块传递的对象。