假设您有多个模型,其中包含地址、邮政编码、省/国家、电话号码等字段。
这些是具有特定正则表达式验证的相当常见的字段。如果您在每个模型中放置相同的验证和正则表达式,它就会重复。此外,测试是重复的。这是一种气味 ;)
使用 ruby 和 rails 重构这些类型的东西的最佳方法是什么?模块?
在带有 Hibernate 的 Java 中,我们将使用组件类来存储地址,然后将验证逻辑放在那里。每个想要使用地址的模型都只包含一个,它将获得所有地址验证逻辑。
在 Rails 中实现相同目标的方法是什么?谢谢!
最佳答案
为您需要的各种类型的验证构建自定义验证器,然后在您的模型类中调用它们。
例如:
class PostalCodeValidator < ActiveModel::EachValidator def validate_each(record, attr_name, value) unless value =~ /^\d{5}$/ record.errors[attr_name] << "must be a 5-digit postal code" end end
现在在每个模型类和每个属性(邮政编码)中使用该验证。例如,如果您的客户有一个属性 postal_code:
class Customer < ActiveRecord::Base validates :postal_code, :postal_code => true end
这里有更多细节和很多花哨的选项,所以我建议在 Google 上搜索 rails custom validators。
关于ruby-on-rails - 在 Rails 中重构验证逻辑和正则表达式的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944499/