动态模型验证

时间:2011-01-03 21:40:13

标签: ruby-on-rails ruby validation ruby-on-rails-3

我想为我的一个模型创建一些包含位置信息(街道,地点,邮政编码等)的验证。我希望能够根据选择的国家/地区更改验证规则。

例如,postal_code的验证规则对于美国和美国而言是不同的。加拿大。此外,一些国家没有邮政编码,因此不需要验证规则。

我将如何实施这样的事情?

2 个答案:

答案 0 :(得分:6)

将其放入模型中以运行任何自定义逻辑进行验证。

validate :location_should_be_valid

def location_should_be_valid

  # run all your custom logic here

  # if it isn't valid, add an error indicating why
  if country == "Canada"
    errors.add(:postal_code, "Invalid postal code for Canada") if postal_code.length != 7
  end
end

在Rails指南中了解更多相关信息:
http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-validation-methods

答案 1 :(得分:1)

validates :postal_code, :presence => true, :if => :check_country

def check_country
  ["US", "Canada"].include?(self.country)
end