Rails: Как правильно использовать Rails.root.join при указании на tmp / caching-dev.txt?

Я настраиваю новый проект Rails, и после первоначальной опрятки с Rubocop у меня осталось одно нарушение.

Рубоп жалуется:

config/environments/development.rb:16:6: C: Please use Rails.root.join('path', 'to') instead.
  if Rails.root.join("tmp/caching-dev.txt").exist?

Я вижу, что Rails.root возвращает путь к текущему проекту. Итак, я пробовал

if File.join(Rails.root, "tmp/caching-dev.text").exist?

вместо. Но все же Рубокоп жалуется:

config/environments/development.rb:17:6: C: Please use Rails.root.join('path', 'to') instead.
  if File.join(Rails.root, "tmp/caching-dev.text").exist?
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Что означают аргументы path и root? Неужто Rails.root это путь ?!


person user3574603    schedule 09.11.2017    source источник
comment
Rails.root - это экземпляр Pathname. Весь смысл Pathname состоит в том, чтобы предоставить абстракцию, которая предоставляет кроссплатформенные пути, чтобы ваш код мог работать в этой глупой ОС, которая получила все наоборот.   -  person max    schedule 09.11.2017


Ответы (3)


Я думаю, Рубокоп предлагает вам сделать что-то вроде этого

if File.exist?(Rails.root.join('tmp', 'caching-dev.txt'))
person Ursus    schedule 09.11.2017

IMHO, Pathname и / не используются достаточно.

if (Rails.root / 'tmp' / 'caching-dev.txt').exist?
person akim    schedule 03.11.2020
comment
Вроде работает в Linux. Это тоже работает в Windows? По какой-то причине мне не удалось найти документацию по _1 _... - person changingrainbows; 06.01.2021
comment
Он использует File.join под капотом (apidock.com/ruby/Pathname/plus). Так что да, он переносится на Windows. - person akim; 07.01.2021

Решил проблему конфигом .rubocop.yml:

Style / ExpandPathArguments: EnformedStyle: Style / ExpandPathArguments Enabled: false

person aleksandr    schedule 19.02.2021