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

问题描述 投票:0回答:1

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

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

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

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

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

accounts.rb

before_validation :validate_account_type

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

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

ruby-on-rails rails-activerecord
1个回答
3
投票

你需要检查 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

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

© www.soinside.com 2019 - 2024. All rights reserved.