【发布时间】:2022-06-30 23:56:57
【问题描述】:
我正在向我的 Ruby on Rails 模型添加一种验证方法,该方法根据另一个字段的值检查一个字段的值。
规则是如果value_type == 'range',那么a_max和b_max必须设置。
我的方法是这样的:
def ensure_correct_type
if value_type == 'range'
if a_max.present? == false
errors.add(:a_max, 'must be set for a range.'
end
if b_max.present? == false
errors.add(:b_max, 'must be set for a range.'
end
end
end
代码运行良好,但我收到了 rubocop 警告:
样式/GuardClause:使用保护子句(除非 value_type == 'range' 否则返回),而不是将代码包装在条件表达式中。
在 Ruby 中编写这样的内容的正确约定是什么? Robocop 中的建议是执行return unless value_type == 'range',但这似乎很奇怪,因为该方法根本没有返回。
我确实尝试过执行该建议:
def ensure_correct_type
return unless value_type == 'range'
if a_max.present? == false
errors.add(:a_max, 'must be set for a range.'
end
if b_max.present? == false
errors.add(:b_max, 'must be set for a range.'
end
end
但是我在if a_max.present? == false 行收到相同的警告...我认为我不能在该行上执行return unless,因为我想在必要时为这两个字段添加错误。
Ruby 中处理此类事情的最佳实践约定是什么?
【问题讨论】:
标签: ruby-on-rails ruby