如何使用自定义谓词通过干验证验证多个字段?

时间:2016-12-28 01:12:48

标签: ruby-on-rails ruby validation

我有一个地址表单,我想作为一个整体验证,而不是自己验证每个输入。我只能通过将line1,city,state,zip传递给自定义谓词方法来判断地址是否有效,以便它可以将它们作为一个单元进行检查。

我该怎么做?我只看到如何验证单个字段。

2 个答案:

答案 0 :(得分:1)

更新 - 这是针对ActiveRecords而不是from IPython.core.display import HTML pd.set_option('display.max_colwidth', -1) df['DESCRICAO'] = df['DESCRICAO'].str.replace('\$', '\\$').str.replace('\n', '<br>') HTML(df.to_html(escape=False)) gem。

请参阅本教程http://guides.rubyonrails.org/active_record_validations.html

从教程中引用,

  

您还可以创建验证模型状态的方法,并在错误集合无效时将其添加到错误集合中。然后,您必须使用dry-validation(API)类方法注册这些方法,并传入验证方法名称的符号。

validate

答案 1 :(得分:1)

似乎this "High-level Rules" example可以帮到你:

schema = Dry::Validation.Schema do
  required(:barcode).maybe(:str?)

  required(:job_number).maybe(:int?)

  required(:sample_number).maybe(:int?)

  rule(barcode_only: [:barcode, :job_number, :sample_number]) do |barcode, job_num, sample_num|
    barcode.filled? > (job_num.none? & sample_num.none?)
  end
end

barcode_only一次检查3个属性。

所以你的代码可能是:

  rule(valid_address: [:line1, :city, :state, :zip]) do |line, city, state, zip|
    # some boolean logic based on line, city, state and zip
  end