如下面的代码所示,我试图根据相同表单的复选框的值验证ActiveModel对象的表单值。
如果选中此框(我确保它将返回true
而不是1
),则应停用order_number
上的验证,因为该字段也已停用(通过JS)。下面显示的天真方法,使用连接到复选框not_a_customer
的属性作为验证order_number
的条件不起作用。
我还能尝试什么?
我有一个ActiveModel类:
class SupportCase
include ActiveModel::Model
include ActiveModel::Validations
attr_accessor(:email, :os, :inquiry_type, :order_number, :first_name, :last_name, :message, :not_a_customer)
validates :order_number, presence: true,
numericality: { only_integer: true },
length: { in: (4..5), message: 'doh' },
unless: :not_a_customer
end
用于创建支持案例的表单:
= simple_form_for @support_case, html: { class: 'form inset' } do |f|
.row
.col.sm-6
.row{ id: 'order-row' }
.col.sm-6
= f.input :order_number, input_html: { class: 'icon-field hash-icon' }
.col.sm-6
.label-title{ title: t("simple_form.labels.support_case.hint") }
= f.input :not_a_customer, as: :boolean do
= f.check_box :not_a_customer, {}, "true", "false"
.col.sm-6
= f.input :email, input_html: { type: 'email', required: 'true' }
= f.input :first_name, input_html: { type: 'text' }
= f.input :last_name, input_html: { type: 'text' }
.col.sm-12
~ f.input :message, as: 'text', input_html: { required: 'true' }
%button.btn.btn-action
= t('views.contact.form.submit')
答案 0 :(得分:1)
检查not_a_customer
的值。你只是得到一个字符串而不是一个布尔值,这总是真实的(“真”,“假”都是真值)。
在Rails中,您可以not_a_customer.to_bool
将其转换为布尔值。
checkbox
未将您的值转换为boolean
,因为params
被解析为好像它们都是字符串(包括int
,string
,{ {1}}值)。