我正在尝试用ActiveRecord代替Dry-validations验证,但是我一直找不到任何应用程序中的实现示例。
干式验证文档:http://dry-rb.org/gems/dry-validation/
我已经将下面的内容添加到表单对象中,但是我不知道如何实际实现它,所以如果title没有输入到UI的表单中,验证就会失败。
schema = Dry::Validation.Schema do
required(:title).filled
endForm Object (用Virtus安装):
class PositionForm
include Virtus.model
include ActiveModel::Model
require 'dry-validation'
require 'dry/validation/schema/form'
# ATTRIBUTES
attribute :id, Integer
attribute :title, String
...
# OLD ACTIVE RECORD VALIDATIONS
#validates :title, presence: true
# NEW DRY VALIDATIONS
schema = Dry::Validation.Schema do
required(:title).filled
end
def save
if valid?
persist!
true
else
false
end
end
def persist!
@position = Position.create!(title: title...)
end
end我以前从未使用过dry-validation -任何指导都将是非常感谢的!
更新
我已经能够“让它工作”,但它仍然感觉不像正确的设计模式。
更新保存方法
def save
schema = Dry::Validation.Schema do
required(:title).filled
end
errors = schema.(title: title)
if valid? && errors.messages.empty?
persist!
true
else
false
end
end如果有人能够分享适当的设计模式的指导,将dry-validation实现为一个virtus样式的表单对象,那将是非常感谢的!
发布于 2016-09-26 21:44:07
我会尝试在模型级别上保持验证。
在初始化器中有一个ModelValidations模型,每个方法都以它验证的模型命名。
config/initialize/model_validations.rb
module ModelValidations
def position_form
Dry::Validation.Schema do
required(:title).filled
end
end
end在模型中,调用该模型的dry_validation模块。
app/models/position_form.rb
class PositionForm
validates :dry_validation
def dry_validation
ModelValidations.position_form(attributes).each do |field, message|
errors.add(field, message)
end
end
endhttps://stackoverflow.com/questions/39606680
复制相似问题