ruby-on-rails - 在 Rails 中重构验证逻辑和正则表达式的最佳方法是什么?

标签 ruby-on-rails ruby regex validation refactoring

假设您有多个模型,其中包含地址、邮政编码、省/国家、电话号码等字段。

这些是具有特定正则表达式验证的相当常见的字段。如果您在每个模型中放置相同的验证和正则表达式,它就会重复。此外,测试是重复的。这是一种气味 ;)

使用 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/

相关文章:

ruby-on-rails - 否定 assert_difference?

python - Scrapy规则的正则表达式

ruby-on-rails - 当前使用 Rails 构建 Facebook 应用程序的资源有哪些?

javascript - 如何从浏览器触发扫描仪?

ruby-on-rails - rails 将循环分成两个表。 rails View ,新手

ruby-on-rails - ruby 中 %@ ... @ 的含义是什么?

java - 时间戳字符串分割获取日期和时间的有效方法

regex - 如何从 Google 电子表格中的文本正文中删除 HTML 标记?

ruby-on-rails - 使用 RSpec 和 Rails 测试给定布局的渲染

ruby-on-rails - 构建新的 Rails 应用程序错误加载 'sqlite3' 没有明显的写入版本