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)
所以我有我的改革对象,我想在验证之前解析我的字符串数据,以便能够使用干验证
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)