Ruby on rails 动态模型验证

Ruby on rails 动态模型验证,ruby-on-rails,ruby,validation,ruby-on-rails-3,Ruby On Rails,Ruby,Validation,Ruby On Rails 3,我想为我的一个模型创建一些验证,该模型包含位置信息(街道、地区、邮政编码等)。我希望能够根据选择的国家更改验证规则 例如,美国和加拿大的邮政编码验证规则将有所不同。此外,一些国家没有邮政编码,因此不需要验证规则 我该如何实现这样的东西呢?将其放在您的模型中,以运行任何自定义逻辑进行验证 validate :location_should_be_valid def location_should_be_valid # run all your custom logic here #

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

例如,美国和加拿大的邮政编码验证规则将有所不同。此外,一些国家没有邮政编码,因此不需要验证规则


我该如何实现这样的东西呢?

将其放在您的模型中,以运行任何自定义逻辑进行验证

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指南中了解更多信息:

如何从位置中访问表单值?这些值是否有效?它们将存储在模型的正常变量中。这将在填充值之后、保存值之前调用。我修改了答案,给出了一个例子。这是一个更合适的方法
validates :postal_code, :presence => true, :if => :check_country

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