【发布时间】:2016-09-21 02:41:23
【问题描述】:
我正在尝试将 ActiveRecord 验证替换为 Dry-validations,但我找不到任何应用内实现示例可遵循。
干验证文档:http://dry-rb.org/gems/dry-validation/
我已在表单对象中添加了以下内容,但我不明白如何实际实现它,因此如果未在 UI 的表单中输入 title,则验证失败。
schema = Dry::Validation.Schema do
required(:title).filled
end
表单对象(使用 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 样式表单对象的适当设计模式的指导,我们将非常感激!
【问题讨论】:
标签: ruby-on-rails validation virtus