Команда Rubocop для отключения Rails/SkipsModelValidations: избегайте использования ошибки update_all

Я хочу изменить один столбец на is_deleted: true в своих записях по строке ниже:

UserTag.where(cms_tag_id: webhook.dig('entity', 'id')).update_all(is_deleted: true)

Но я получаю ошибку Rubocop:

Rails/skipsmodelvalidations: avoid using update_all because it skips validations.

Я знаю, что могу использовать каждый блок и обновлять все столбцы через e.update в блоке, но update_all намного быстрее, одна строка, аккуратное решение.

Как отключить такую ​​ошибку rubocop только для этой, конкретной строки?


person mr_muscle    schedule 13.08.2020    source источник


Ответы (2)


Вы можете запустить приведенную ниже команду, которая создаст файл .rubocop_todo.yml, который будет записывать и игнорировать определенные нарушения для файлов-нарушителей:

rubocop --auto-gen-config --exclude-limit 999 --no-offense-counts

--auto-gen-config генерирует файл yml, единственный необязательный флаг для достижения того, что вы ищете.

--exclude-limit xxx - количество правонарушений, прежде чем rubocop отключит проверку для всего приложения.

--no-offense-counts не записывает количество правонарушений в файле yml.

Убедитесь, что вы подумали о последствиях игнорирования линтеров; обычно не рекомендуется следовать советам линтера. Имейте в виду, что это отключит проверку всех нарушений в спецтестах.

Обновить

Если вы хотите отключить проверку rubocop без создания файла, вы можете использовать такой комментарий:

Company.where(cms_tag_id: webhook.dig('entity', 'id')).update_all(is_deleted: true) # rubocop:disable Rails/SkipsModelValidations
person benjessop    schedule 13.08.2020
comment
Честно говоря, я не хочу создавать новый файл только для одной строки. Я думаю, что есть какая-то функция отключения одной строки, синтаксис будет похож на UserTag.where(..).update_all(...) #some rubocop disable command. Но я не знаю, что это за команда для такого действия. - person mr_muscle; 13.08.2020

Чтобы расширить ответ @benjessop:
Чтобы выборочно отключить RuboCop для блока кода, используйте блок # rubocop:disable ... # rubocop:enable, например:

# rubocop:disable Rails::SkipsModelValidations

# The specified cop is not enforced here.
# Therefore, make this block of code minimal. 
# For example, just this one line:

UserTag.where(cms_tag_id: webhook.dig('entity', 'id')).update_all(is_deleted: true)

# rubocop:enable Rails::SkipsModelValidations

СМОТРИТЕ ТАКЖЕ:

Отключение копов в исходном коде
Более общая информация о конфигурации RuboCop

person Timur Shtatland    schedule 13.08.2020