如何解决出于实际原因,我不同意一个 Rails/Rubocop 约定我想知道这个约定背后的基本原理,如果有更好的方法
我喜欢 rubocop 及其与 Rails 的集成,并且通常一直尊重它的建议,我可以对它基于的 Ruby 和 Rails 约定说同样的话。 但是我真的不同意下面的约定,因为我发现它真的适得其反。
agent_recorded_date = MonitorLog.joins(:connected_monitor).
where('connected_monitors.id = ? AND detail = ?',replacement.replaced_monitor_id,'Monitor event - Replace monitor error').
first&.timestamp
这会被 Rubocop 皱起眉头,这确实不是惯例。约定的方式是这样的:
agent_recorded_date = MonitorLog.joins(:connected_monitor)
.where('connected_monitors.id = ? AND detail = ?','Monitor event - Replace monitor error')
.first&.timestamp
注意点所在的地方将查询分成多行以符合编码指南...上面的第一个选项将导致称为点位置攻击的Rubocop警告。 现在,假设我们想调试这个查询或在 Rails 控制台/IRB 中快速测试它,我们会看到什么?
如果您将推荐的方式(上面的第一个选项)复制并粘贴到控制台中,它将引发错误。第二个会起作用,因为如果你以句点结束一行 IRB 会认为它是一个多行命令并且会成功。
所以这是我真的不同意 Rubocop 的地方,我想知道在这里遵循约定的好处,以及是否有更好的方法将多行命令从 IDE 复制和粘贴到 rails 控制台以快速测试它们(以防万一在我们公司,它不仅是专业的开发人员,而且 QA 人员也可能需要在控制台中运行特定查询)。
解决方法
-
最新的
irb
(1.3.5) supports copy-pasting multiple lines 如果您还不能升级,有一个简单的方法可以在 irb 中粘贴多行表达式:输入开头的
(
,粘贴您的代码,然后是)
。
不要为了工具的限制而牺牲你的代码。改为修复该工具。如果您仍想违反此约定,可以将 RuboCop 配置为使用 EnforcedStyle: trailing
。
您可以使用 .rubocop.yml
配置文件更改 rubocop 的配置。见https://docs.rubocop.org/rubocop/configuration.html
在这种情况下,您要更改(或设置)EnforcedStyle: trailing
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。