首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >2在Hanami + dry-validation中进行现场验证

2在Hanami + dry-validation中进行现场验证
EN

Stack Overflow用户
提问于 2017-06-14 00:18:04
回答 2查看 848关注 0票数 4

我一直在尝试使用Hanami (它位于dry-validation之上)来验证登录过程。

重点是:如何验证与两个字段相关的内容:电子邮件+密码?

我读过关于自定义谓词的文章,但它们似乎只针对每个字段。另一个概念是规则,但根据示例,它并不像我所需要的那样将两件事联系起来。

下面是我的代码:

代码语言:javascript
复制
module Web::Controllers::Sessions
  class Create
    include Web::Action

    expose :validation # my standard way to show errors in the template

    def call(params)
      @validation = SigninValidator.new(params[:user]).validate
      if @validation.success? 
      # more stuff here
    end
  end
end

class SigninValidator
  include Hanami::Validations::Form

  validations do
    required(:email) { format?(EMAIL_REGEX)}
    required(:password).filled(:str?)

    # I GOT CONFUSED HERE
    # how could I use someting like a repository and relate something like 
    # predicate + message for "email or password doesn't match"

  end
end

不幸的是,validations section in Hanami Guide是空的,我找不到一个解决方案来查看源代码(hanami验证和干验证)。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2017-06-14 01:05:33

您可以使用High-Level RulesCustom Validation Blocks。如下所示:

代码语言:javascript
复制
validations do
  required(:email) { format?(EMAIL_REGEX)}
  required(:password).filled(:str?)

  rule(:email_and_password: [:email, :password]) do |email, password|
    # Example, do what you need here
    # Only dry-rb rules are valid here
    email.filled? & password.filled?
  end

  # Or

  validate(:email_and_password: [:email, :password]) do |email, password|
    # Example, do what you need here
    # Any Ruby code is valid here
    email.filled? && password.filled?
  end
end

也许您需要在这里将:email:password设置为optional,并确保在rulevalidate块中填充它们。

票数 3
EN

Stack Overflow用户

发布于 2019-06-05 18:55:03

我不完全理解你想要达到的目的,你似乎是在尝试验证电子邮件和/或密码是否与数据库中的匹配?如果是这样的话,那么你在错误的地方做了,验证器的目的是只验证参数的。因此,如果电子邮件的格式错误,或者密码和密码确认不匹配,验证可以捕捉到这一点并提供正确的错误消息。如果您希望根据数据库验证详细信息,那么这是应该在交互器中完成的事情。

m45t3r说得对,如果您确实想要验证两个依赖属性,那么规则可能是可行的。

至于你的坏掉的链接,花美指南前段时间被移走了,旧的链接似乎转发得不太好!当前用于验证的文档,特别是规则,可以在here中找到。

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

https://stackoverflow.com/questions/44526777

复制
相关文章

相似问题

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