为什么rubocop的Rails / FilePath警察推荐Rails.root.join

问题描述 投票:0回答:4

我的代码中有以下行:

require "#{Rails.root}/config/environments/production.rb"

Rubocop的Rails/FilePath警察建议我将其更改为:

require Rails.root.join('config', 'environments', 'production.rb')

为什么?前者更紧凑,看起来更快,可以说更具可读性。

ruby rubocop
4个回答
3
投票

来自Rubocop manual

此cop用于标识文件路径连接过程的用法以使用Rails.root.join子句。这是为了避免不使用'/'作为路径分隔符的操作系统上的错误。


2
投票

我认为这只是一种“让我们选择一种风格”的方法。当这个想法是proposed时,我没有看到任何有意义的讨论。


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

0
投票

正如其他人所提到的,RuboCop建议这样做是为了避免不使用/作为路径分隔符的操作系统出现问题。在问到这个问题之后,RuboCop团队增加了一些澄清(如https://github.com/bbatsov/rubocop/pull/5571/files所见)。

话虽如此,我不确定这个警察是否必要。从其他SO线程,如slash and backslash in Ruby,听起来Ruby可以很好地自动转换幕后的路径(当代码在Ruby中执行时)。在将路径传递给外部系统的情况下,人们可能对路径结构非常具体。

© www.soinside.com 2019 - 2024. All rights reserved.