Jun*_*Ito 4 ruby ruby-on-rails dry-rb dry-validation
我想允许日期格式的字符串与干验证宝石,但我不能。
class NewUserContract < Dry::Validation::Contract
params do
optional(:date).filled(:date)
end
end
contract = NewUserContract.new
contract.call(date: Date.today)
#=> #<Dry::Validation::Result{:date=>Tue, 14 Jan 2020} errors={}>
# I want to allow date formatted string
contract.call(date: '2020-01-20')
#=> #<Dry::Validation::Result{:date=>"2020-01-20"} errors={:date=>["must be a date"]}>
Run Code Online (Sandbox Code Playgroud)
日期格式的字符串在 0.13 之前是允许的,但从 1.0 开始似乎被禁止。现在我正在尝试升级 Rails 应用程序中的 dry-validation gem。
编辑
我不知道为什么,但上面的代码现在可以工作了。也许缓存问题?(bin/rake tmp:cache:clear不过我记得我跑过)请忽略这个问题。
我检查过dry-validation 1.4.1,dry-schema 1.4.3并且dry-types 1.2.2这工作得很好:
require 'dry/validation'
class NewUserContract < Dry::Validation::Contract
params do
optional(:date).filled(:date)
end
end
contract = NewUserContract.new
puts contract.call(date: Date.today).inspect
# #<Dry::Validation::Result{:date=>#<Date: 2020-01-14 ((2458863j,0s,0n),+0s,2299161j)>} errors={}>
puts contract.call(date: '2020-01-20').inspect
# #<Dry::Validation::Result{:date=>#<Date: 2020-01-20 ((2458869j,0s,0n),+0s,2299161j)>} errors={}>
Run Code Online (Sandbox Code Playgroud)