【问题标题】:Radio buttons for boolean field, how to do a "false"?布尔字段的单选按钮,如何做“假”?
【发布时间】:2010-11-06 11:13:41
【问题描述】:

我目前正在尝试在 Rails 3 中插入​​一些简单的真/假单选按钮,但我找不到让单选按钮插入“假”的方法。

我的代码如下:

<%= 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”
  • 真/假
  • “真”/“假”
  • “是”/“否”

但对于 false 值似乎没有任何效果。我的字段设置为

validates_presence_of :accident_free

当单击 false 按钮​​时,我总是收到必须填写才能继续的消息。点击 true 按钮时,它可以正常工作,但 false 不会被识别。

有谁知道正确的做法吗?

提前致谢

阿恩

【问题讨论】:

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


    【解决方案1】:

    就是这样:

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

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

    如果您想验证布尔字段是否存在(其中真实值为真和假),您将需要使用validates_inclusion_of :field_name, :in =&gt; [true, false]

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

    我使用脚手架和"1""0" 尝试了您的示例

    <%= f.radio_button :foo, "0" %>
    <%= f.radio_button :foo, "1" %>
    

    他们工作了。

    【讨论】:

    • 嘿,非常感谢,这真的很管用 :) 我总是很着迷 stackoverflow 上的人回答这些问题的速度有多快。多亏了你,它现在可以工作了!
    • 还有一条评论:它更适用于“true”/“false”,因为当验证失败时,radio_buttons 会被正确预选。
    • 非常好,谢谢。此外,我还为我的单选按钮字段验证添加了一条更清晰的消息:# validates_inclusion_of :field_name, in: [true, false], message: 'choose an option'
    【解决方案2】:

    我最近为此找到了另一种解决方案:

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

    解释here

    【讨论】:

    • 上面的效果很好。只需确保您的列/字段没有定义默认值即可。
    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 2012-12-07
    • 2016-11-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多