首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rails表单对象中实现“干-验证”?

如何在Rails表单对象中实现“干-验证”?
EN

Stack Overflow用户
提问于 2016-09-21 02:41:23
回答 1查看 2.2K关注 0票数 4

我正在尝试用ActiveRecord代替Dry-validations验证,但是我一直找不到任何应用程序中的实现示例。

干式验证文档:http://dry-rb.org/gems/dry-validation/

我已经将下面的内容添加到表单对象中,但是我不知道如何实际实现它,所以如果title没有输入到UI的表单中,验证就会失败。

代码语言:javascript
复制
schema = Dry::Validation.Schema do
  required(:title).filled
end

Form Object (用Virtus安装):

代码语言:javascript
复制
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 -任何指导都将是非常感谢的!

更新

我已经能够“让它工作”,但它仍然感觉不像正确的设计模式。

更新保存方法

代码语言:javascript
复制
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样式的表单对象,那将是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 21:44:07

我会尝试在模型级别上保持验证。

在初始化器中有一个ModelValidations模型,每个方法都以它验证的模型命名。

config/initialize/model_validations.rb

代码语言:javascript
复制
module ModelValidations
  def position_form
    Dry::Validation.Schema do
      required(:title).filled
    end
  end
end

在模型中,调用该模型的dry_validation模块。

app/models/position_form.rb

代码语言:javascript
复制
class PositionForm
  validates :dry_validation

  def dry_validation
    ModelValidations.position_form(attributes).each do |field, message|
      errors.add(field, message)
    end
  end

end
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39606680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档