我的Ruby on Rails
项目中有一个表单。这与我的模型有关。
我有一个boolean
值,可以true
或false
。
我没有使用复选框来设置它,而是将其更改为选择框。
<%= f.input :test_account, :as => :select, :prompt => true, :include_blank => true %>
我在这里添加了:prompt
和:include_blank
(可能我只需要其中一个)。目前,select默认为“No”值。这不是我想要的,我希望它坚持“请选择...”以验证用户做出选择而不是仅仅跳过整个问题。
在我的模型中,我现在有以下内容来验证它:
validates_inclusion_of :test_account, :in => [true, false]
如何将其配置为“请选择”,“否”,“是”作为其值,并在提交表单但未选择任何值时报告错误。
答案 0 :(得分:1)
您还可以使用select
方法生成Select
下拉列表,如
示例:
select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {include_blank: 'None'})
可能会成为:
<select name="post[person_id]">
<option value="">None</option>
<option value="1">David</option>
<option value="2" selected="selected">Sam</option>
<option value="3">Tobias</option>
</select>
在你的情况下
f.select("test_account", ['true', 'false'], {include_blank: 'Please select...'})
注意:
当没有当前值时,:prompt
会出现在列表中:include_blank
始终显示在列表中。
答案 1 :(得分:0)
<%= f.input :test_account, :as => :select, :prompt => "Please select"%>
尝试
<%= f.input :test_account, collection: [true,false], prompt: "Please select"%>
答案 2 :(得分:0)
使用此代码:
<%= f.input :test_account, :as => :select, :prompt => "Please select"%>
答案 3 :(得分:0)
3个状态无法用布尔值表示。
我不知道这是否是答案,但你的问题很有趣。我认为这是一个数据问题,而不是形式问题。如果我了解您的情况,您有3个可测试的变量状态:
这似乎在逻辑上排除了使用布尔值。错误状态,零状态和未选择的状态都是&#34; false&#34;,因此您在该状态下发生碰撞。当您处于表单中时,您根本不知道var是否未被选中,或者被选为false(除非您执行一些js侦听器操作以查看是否有某些内容被点击)。
在我看来,解决方案是使用字符串来表示&#34;是&#34;和&#34;不&#34;和nil作为第三个,没有任何选择的选项。
然后,当您使用模型验证变量的存在时,表单验证按设计工作。
<强>纠错/澄清强>
在Ruby on Rails中,3状态可以用布尔值
表示如果有人遇到这个讨论,我想我会在与SO用户@D-side讨论之后发布更正。
对于以前的小工作者来说,这似乎不符合逻辑,我自己就在其中,但似乎我们认为Ruby of Rails中的布尔值并不是严格类型为布尔,实际上有三种状态。即使在数据库中,布尔类型也可能有3种状态。
来自PostgreSQL文档:
布尔类型可以有几种状态:&#34; true&#34;,&#34; false&#34;和第三种状态,&#34; unknown&#34;,由SQL null表示值。
在与@D-side的讨论中,下面是我所谓的三布尔的优秀Ruby解释。