我的代码中有以下行:
require "#{Rails.root}/config/environments/production.rb"
Rubocop Rails/FilePath
警察建议我将其更改为:
require Rails.root.join('config', 'environments', 'production.rb')
为什么呢?前者更紧凑,看起来更快,可以说更具可读性。
答案 0 :(得分:3)
此cop用于标识文件路径连接过程的用法以使用Rails.root.join子句。这是为了避免不使用' /'的操作系统上的错误。作为路径分隔符。
答案 1 :(得分:2)
我认为这只是一个"让我们选择一种风格"做法。当这个想法是proposed时,我没有看到任何有意义的讨论。
答案 2 :(得分:1)
这是默认设置。您可以阅读有关选项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
答案 3 :(得分:0)
正如其他人所提到的,RuboCop建议这样做是为了避免不使用/
作为路径分隔符的操作系统出现问题。在提出这个问题之后,RuboCop团队补充了一些说明(见https://github.com/bbatsov/rubocop/pull/5571/files)。
话虽如此,我不确定这个警察是否必要。从其他SO线程,如slash and backslash in Ruby,听起来像Ruby在后台自动转换路径(当代码在Ruby中执行时)很好。在将路径传递给外部系统的情况下,人们可能对路径结构非常具体。