我的代码中有以下行:
require "#{Rails.root}/config/environments/production.rb"
Rubocop的Rails/FilePath
警察建议我将其更改为:
require Rails.root.join('config', 'environments', 'production.rb')
为什么?前者更紧凑,看起来更快,可以说更具可读性。
此cop用于标识文件路径连接过程的用法以使用Rails.root.join子句。这是为了避免不使用'/'作为路径分隔符的操作系统上的错误。
我认为这只是一种“让我们选择一种风格”的方法。当这个想法是proposed时,我没有看到任何有意义的讨论。
这是默认设置。您可以阅读更多关于选项here的信息
您可以使用.rubocop.yml文件进行更改。这是一个例子,看一下文件的结尾。
inherit_from: .rubocop_todo.yml
AllCops:
DisplayCopNames: true
Exclude:
- bin/**/*
- db/schema.rb
- node_modules/**/*
TargetRubyVersion: 2.3
Metrics/LineLength:
Max: 120
Metrics/MethodLength:
Exclude:
- test/**/*
Rails:
Enabled: true
Rails/FilePath:
Enabled: false
正如其他人所提到的,RuboCop建议这样做是为了避免不使用/
作为路径分隔符的操作系统出现问题。在问到这个问题之后,RuboCop团队增加了一些澄清(如https://github.com/bbatsov/rubocop/pull/5571/files所见)。
话虽如此,我不确定这个警察是否必要。从其他SO线程,如slash and backslash in Ruby,听起来Ruby可以很好地自动转换幕后的路径(当代码在Ruby中执行时)。在将路径传递给外部系统的情况下,人们可能对路径结构非常具体。