Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 复选框标记不接受值_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 复选框标记不接受值

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>

我有一个简单的todo应用程序,其中有一个新页面,其中包含模型任务的表单和一个索引页面

在新视图中创建新任务时: (erledigt是指为了完整性而进行)

我看到表单保存了我的输入

问题:

在索引视图中,每个任务都会被检查,为什么? 有人能解释或提供任何建议吗

<% @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>