Ruby on rails 复选框标记不接受值
我有一个简单的todo应用程序,其中有一个新页面,其中包含模型任务的表单和一个索引页面 在新视图中创建新任务时: (erledigt是指为了完整性而进行) 我看到表单保存了我的输入 问题: 在索引视图中,每个任务都会被检查,为什么? 有人能解释或提供任何建议吗Ruby on rails 复选框标记不接受值,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个简单的todo应用程序,其中有一个新页面,其中包含模型任务的表单和一个索引页面 在新视图中创建新任务时: (erledigt是指为了完整性而进行) 我看到表单保存了我的输入 问题: 在索引视图中,每个任务都会被检查,为什么? 有人能解释或提供任何建议吗 <% @tasks.each do |task| %> <tr> <td><%= check_box_tag(task.erledigt, 1, 0) %> </td>
<% @tasks.each do |task| %>
<tr>
<td><%= check_box_tag(task.erledigt, 1, 0) %> </td>
<td><%= link_to task.aufgabe, task %></td>
<td><%= task.beschreibung %></td>
<td><%= task.prioriaet %></td>
<td><%= link_to 'zeigen', task %></td>
<td><%= link_to 'LÖSCHEN', task, method: :delete, data: { confirm: 'Sicher?' } %></td>
</tr>
<% end %>
基本上,索引视图通过复选框显示所有任务,并且每个任务都已选中,但如果“erledigt”属性为1,则应选中它。
如您所见,有一些任务与0有关
当前的索引视图:
[x] 任务1
[x] 任务2
[x] 任务3
[x] 任务4
索引视图应如何:
[x] 任务1
[x] 任务2
[]任务3
[]task4所有复选框都显示为选中状态,因为您正在将选项
0
作为选中的传递给,ruby将0
解释为true
值
<td><%= check_box_tag(task.erledigt, 1, 0) %> </td>
简单地说,将上述内容更新为
<td><%= check_box_tag("task_erledigt",task.erledigt, task.erledigt == 1 ? true: false ) %> </td>
因此,根据task.erledigt
的值,复选框将显示选中或未选中状态。现在每个任务都未选中。。。为什么?问题是您正在测试task.eledigt==1
。它要么为true,要么为false(如果false不是默认值,则为null),因此它永远不会等于1。参数是(name,value,checked(bool)),因此您应该执行复选框标记(“task\u erledigt”,“1”,task.erledigt)
。我知道,传递值“1”
,但返回值true
,这令人困惑。这与布尔值在数据库中的保存方式有关。@MaxWilliams OP将值存储为数据库中的erledigt
字段中的1
和0
。检查SELECT'tasks'的输出。'tasks'=>[1,1,0,0]
Yes中的'erledigt',但是rails在从数据库记录创建对象时会将这些db存储的值转换为布尔值。因此,在ruby中,数据库中的1或0变为true
或false
。数据库存储布尔值的方式不同:有些数据库(如postgres)将布尔值存储为“t”或“f”。其他的,例如mysql,将它们存储为1或0。海报的db显然使用了1和0,所以我以它为例。关于rails将它们转换为布尔值的说法仍然成立:ActiveRecord中的每个DBMS都有一个不同的数据库转换模块。
<td><%= check_box_tag(task.erledigt, 1, 0) %> </td>
<td><%= check_box_tag("task_erledigt",task.erledigt, task.erledigt == 1 ? true: false ) %> </td>