Trailblazer 在通过 :populator 验证之前解析数据

Trailblazer parsing data before validation by :populator

所以我有我的改革对象,我想在验证之前解析我的字符串数据,以便能够使用干验证 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] 在后面的改革中究竟是用来干什么的。

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

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

我会使用干验证输入预处理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)