【问题标题】:Trailblazer parsing data before validation by :populatorTrailblazer 在验证前解析数据:populator
【发布时间】:2018-10-30 12:44:47
【问题描述】:

所以我有我的改革对象,我想在验证之前解析我的字符串数据,以便能够使用干验证 required(:my_field).filled(gt?: 0)

为了做到这一点,我使用 populator property :membership_fee, populator: MyPopulator

我的问题是访问和解析重组对象所采用的数据的最佳方式是什么。

目前,我使用的是:

property :my_field, populator: lambda { |fragment| fragment[:doc]['my_field'] = BigDecimal.new(fragment[:doc]['my_field']) }

但我不确定这是否是处理它的最佳方式 - 我的意思是通过 fragment[:doc] 访问它是最漂亮的方式吗?我不知道fragment[:doc] 到底是用来做什么改革的。

【问题讨论】:

    标签: ruby trailblazer


    【解决方案1】:

    我会使用干验证输入预处理https://dry-rb.org/gems/dry-validation/input-preprocessing/

    configure do
      config.type_specs = true
    end
    
    required(:my_field, Types::Params::Integer).filled(gt?: 0)
    

    【讨论】:

    【解决方案2】:

    我认为您可以将十进制值分配给返回该对象的my_field,例如:

    property :my_field, populator: ->(_fragment:, **) do 
      BigDecimal.new(my_field)
    end
    

    【讨论】:

    • 谢谢你,伙计。愚蠢的我 - lambda 只是返回将覆盖给定属性的值;]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2023-04-01
    • 2020-08-16
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多