Rails惯例混淆改变配置文件

时间:2012-11-29 07:11:54

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

所以,我没有遇到任何问题,因为我对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

是一种更好的做法

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

2 个答案:

答案 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中为配置块传递的对象。