Rails 6 - 创建一个回调以验证输入的特定文本的问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 6 - 创建一个回调以验证输入的特定文本的问题。相关的知识,希望对你有一定的参考价值。

所以我试图创建一个回调来在保存前进行快速验证。

我目前要做的是验证传递到表单隐藏字段的url参数是否没有被改变,并且正好匹配三个选项中的一个。

业主_运营商,经纪人_托运人或承运人。

目前我已经试过了,但是,即使参数不符合其中一个选项,它仍然允许保存表单... ...

我的回调,因为它现在的位置。

accounts.rb

before_validation :validate_account_type

  def validate_account_type
    return if account_type == 'owner_operator' || 'broker_shipper' || 'carrier'
  end

如果有任何帮助,我将非常感激

答案

你需要检查 account_type 对照每个账户类型的文字。

account_type == 'owner_operator' || 'broker_shipper' || 'carrier'

上述表达式的计算方式如下

(account_type == 'owner_operator') || 'broker_shipper' || 'carrier' 

即使 account_type == 'owner_operator' 评价为 false 那么下一个表达式的条件是 broker_shipper 评价为 true. 所以你的记录总是根据条件有效。

在ruby中,除了 nilfalse 一切都是 true.

所以解决方案是

account_type == 'owner_operator' || account_type == 'broker_shipper' || account_type == 'carrier'

再好

ACCOUNT_TYPES = %w(owner_operator broker_shipper carrier)
def validate_account_type
  ACCOUNT_TYPES.include? account_type
end

学会运营商的优先权,对你的长远发展会有帮助。

以上是关于Rails 6 - 创建一个回调以验证输入的特定文本的问题。的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中验证多封电子邮件和处理错误的最佳方法是啥?

在 Rails 5.1 之后,attribute_changed 是如何变化的?更改“验证”回调?

Rails 6.0 在为一种用户创建和更新时验证密码是不是存在,但只为另一种用户更新

Rails 6:从表单输入动态创建/切换/迁移数据库

如何让模型验证与 Rails 中的视图层对话以提供简单的功能?

Rails 6 动作文本 - 表单验证错误