布尔字段的单选按钮,如何做“假”?

时间:2010-11-06 11:13:42

标签: ruby-on-rails forms activerecord ruby-on-rails-3

我目前正在尝试在Rails 3中插入一些简单的true / false单选按钮,但我找不到一种方法来使单选按钮插入“false”。

我的代码如下:

<%= f.radio_button :accident_free, true %><label for="auction_accident_free_true">ja</label>
<%= f.radio_button :accident_free, false %><label for="auction_accident_free_false">nein</label>

我已经尝试过:

  • 1/0
  • “1”/“0”
  • true / false
  • “true”/“false”
  • “是”/“否”

但似乎没有任何东西可以正确处理false值。我的字段设置为

validates_presence_of :accident_free

并且我总是收到消息,在单击false按钮时必须填写它以继续。单击true按钮时,它可以正常工作,但不会识别false。

有谁知道如何正确地做到这一点?

提前致谢

·阿尔

2 个答案:

答案 0 :(得分:53)

就是这样:

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of

  

validates_presence_of()验证指定的属性是否为空(由Object#blank定义?)

     

如果要验证是否存在布尔字段(实际值为true和false),则需要使用validates_inclusion_of :field_name, :in => [true, false]

     

这是由于Object#blank的方式?处理布尔值:false.blank? # => true

我使用脚手架尝试了您的示例,并在

中使用了"1""0"
<%= f.radio_button :foo, "0" %>
<%= f.radio_button :foo, "1" %>

他们工作了。

答案 1 :(得分:2)

我最近为此提出了另一个解决方案:

validates_presence_of :accident_free, :if => 'accident_free.nil?'

解释here