根据属性值使用不同的验证器集

时间:2014-05-22 02:24:01

标签: ruby-on-rails validation

我正在使用Rails模型验证来解决特定概念,请允许我解释一下;我的情况是,给定的用户可以使用多个不同的states,基于此情况,我希望在模型上使用完全不同的验证器集,而使用这些验证器验证模型。

比方说,我的用户可以使用其中一个states,' address_setup'和' billing_setup',我想要两个完全不同一组验证器,我可以以某种方式使用这样的块吗?

with_options if self.state == 'address_setup' do |user|
  user.validates :first_name, :last_name, :address_1, :city, :state_code, :email
  user.validates :state_code, inclusion: { :in => STATE_CODES }
end

显然,if块的with_options部分没有任何意义,这样做的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

验证器中的if选项怎么样?例如:

class User < ActiveRecord::Base
  # ...
  validates :state_code, inclusion: { :in => STATE_CODES },
            if: Proc.new { |u| u.state == 'address_setup' }
  # ...
end