【问题标题】:Rails how to use a select list for a boolean field?Rails如何为布尔字段使用选择列表?
【发布时间】:2020-10-09 23:23:24
【问题描述】:

我在 Rails 5.1.4 上运行,并且在为布尔字段使用选择标记时遇到问题。这是我的表格:

= f.select :insurance_authorization_required, options_for_select([["Yes", true], ["No", false]]), { :prompt => 'Select One'} , { :class => 'dropdown' }

我还验证了该字段的存在:

validates :insurance_authorization_required, presence: true

选择 Yes 会将该字段正确保存为 true,但是如果我选择 No,则会收到错误消息 insurance_authorization_required can't be blank。我尝试改用01

= f.select :insurance_authorization_required, options_for_select([["Yes", 1], ["No", 0]]), { :prompt => 'Select One'} , { :class => 'dropdown' }

但这给出了相同的结果:选择“是”会保存为true,而“否”会引发错误。

我也尝试在我的模型中投射该字段:

def insurance_authorization_required=(val)
  if val.is_a?(TrueClass) || val.is_a?(FalseClass)
    super(val)
  else
    super(val == 'true' || val == '1')
  end
end

这也没有解决它。选择“否”时仍然出现空白错误。

我看到了像这样的多个其他问题,接受的答案是使用 truefalse 作为我的选择选项的值,但为什么它对我不起作用?我错过了什么吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    在 Rails 中,false 被视为 空白。您可以在 Rails 控制台上尝试:

    您应该删除存在验证,并将该字段设置为默认为 false。或者,因为它是一个布尔值,所以将 true 视为 true,将 false 或 nil 视为 false。

    【讨论】:

    • 谢谢!我确实将字段默认设置为false,但只是想检查一下是否存在。我完全忘记了false 被认为是空白,我想我真的需要周末休息。我想我真的需要周末休息......哈哈
    • 很高兴能帮上忙!
    • 哇,谢谢。我有同样的问题,无法弄清楚为什么它一直说属性不能为空白@Aleksandrus
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2015-05-30
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多