首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过dry-validation验证Rails控制器参数

通过dry-validation验证Rails控制器参数
EN

Stack Overflow用户
提问于 2018-11-13 17:15:46
回答 1查看 1.2K关注 0票数 4

我第一次尝试使用dry validation gem。

我想创建一个多模型(用户、地址、公司)的表单

我决定使用一个干式验证器,但是我不能验证表单。我收到验证程序错误“:user=>”必须是哈希“”

如何让它工作?

应用程序/控制器/用户_控制器.rb

代码语言:javascript
复制
class UsersController < ApplicationController
  def new
    @user = User.new
    @user.address = Address.new
    @user.company = Company.new
    @user.company.address = Address.new
  end

  def create
    @user = User.new
    validation = UserValidator::UserSchema.call(params)
    if validation.success?
      @user.attributes = validation.output[:user]
      @user.save
      redirect_to new_user_path, notice: 'Form send!'
    else
      redirect_to new_user_path, warning: "#{validation.errors}"
    end
 end
end

app/model/user.rb

代码语言:javascript
复制
class User < ApplicationRecord
  has_one :company
  has_one :address, as: :addressable
  accepts_nested_attributes_for :company, :address
end

app/validators/user_validator

代码语言:javascript
复制
class UserValidator
  UserSchema = Dry::Validation.Params do
    required(:user).schema do
      required('first_name').filled
    end
  end
end

在创建操作中打印参数输出:

代码语言:javascript
复制
<ActionController::Parameters {"utf8"=>"✓","authenticity_token"=>"Dszr0k90aklK1NC4uGcemAl+yFa9ppMDo/gCLJt2wC1WjTgLC+NFebRqm6iqtVTnQzRgd7v0icntxETbxJ7v9g==", "user"=>{"first_name"=>"Test", "last_name"=>"asdasdasdasd", "email_address"=>"sadasdasd", "date_of_birth"=>"sdasda", "phone_number"=>"", "address_attributes"=>{"street"=>"dadadadsdad", "city"=>"asdasdad", "zip_code"=>"dasd", "country"=>"adsa"}, "company_attributes"=>{"name"=>"", "address_attributes"=>{"street"=>"", "city"=>"", "zip_code"=>"", "country"=>""}}}, "commit"=>"Submit", "controller"=>"users", "action"=>"create"} permitted: false>
EN

回答 1

Stack Overflow用户

发布于 2019-05-18 17:30:36

dry-validation (和dry-schema)不接受ActionController::Parameters,您应该将其转换为哈希。

尝试使用params.to_unsafe_hashparams.permit(...).to_h

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

https://stackoverflow.com/questions/53277535

复制
相关文章

相似问题

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