如果取消选中复选框,我在复选框字段(Perishable can't be blank
)上遇到验证错误。我可以查看日志,看到“perishable”=>“0”在未选中时通过,“perishable”=>“1”在选中时。 “perishable”在控制器中列为白名单,当选中该复选框时,它都可以正常工作。这是怎么回事?
型号:
class Product < ActiveRecord::Base
validates_presence_of :perishable
end
迁移:
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.boolean :perishable, :null => false
end
end
end
查看:
= f.label :perishable
= f.check_box :perishable
渲染视图:
<label for="product_perishable">Perishable *</label>
<input name="product[perishable]" type="hidden" value="0" />
<input id="product_perishable" name="product[perishable]" type="checkbox" value="1" />
答案 0 :(得分:8)
您正在验证是否存在一个布尔字段,当false
时显然会产生问题。
根据this answer:
如果要验证是否存在布尔字段(实际值为
true
和false
),则需要使用validates_inclusion_of :field_name, :in => [true, false]
。