[英]How to implement `dry-validation` gem in a Rails form object?
我試圖用Dry-validations
替換ActiveRecord
驗證,但我一直無法找到任何應用內實現示例。
干驗證文檔: 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風格的形式對象,它將是超級贊賞!
我會嘗試在模型級別進行驗證。
在初始化程序中有一個ModelValidations模型,每個方法都以它驗證的模型命名。
配置/初始化/ model_validations.rb
module ModelValidations
def position_form
Dry::Validation.Schema do
required(:title).filled
end
end
end
在模型中,為該模型調用dry_validation模塊。
應用程序/模型/ 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
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.