Rubocop 命令禁用 Rails/SkipsModelValidations:避免使用 update_all 错误

Rubocop command to disable Rails/SkipsModelValidations: avoid using update_all error

我想通过以下行将我的记录中的一列更改为 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 错误?

您可以运行以下命令,这将生成一个.rubocop_todo.yml文件,该文件将记录并忽略违规文件的特定违规行为:

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

--auto-gen-config 生成 yml 文件,唯一的 non-optional 标志来实现你正在寻找的东西。

--exclude-limit xxx 是在 rubocop 禁用对整个应用程序的检查之前的一些违规行为。

--no-offense-counts 不记录 yml 文件中有多少次违规。

确保您已经考虑过忽略 linter 的后果;不遵循 linter 建议通常是不明智的。请注意,这将禁用对规范测试中所有违规行为的检查。

更新

如果你想在不生成文件的情况下禁用 rubocop 检查,你可以使用如下注释:

Company.where(cms_tag_id: webhook.dig('entity', 'id')).update_all(is_deleted: true) # rubocop:disable Rails/SkipsModelValidations

扩展@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

另请参见:

Disabling Cops within Source Code
有关 RuboCop Configuration

的更多一般信息