【发布时间】:2016-03-07 14:36:37
【问题描述】:
Submit_tag 未提交 checkbox_tag 的选定 ID。
这里是代码:
<%= form_tag pattendance_attendances_path, method: :put do %>
<% if coordinator_signed_in? || admin_signed_in? %>
<ul class="list-group">
<li class="list-group-item">
<%= radio_button_tag "round", 1 , true %> Round 1</li>
<li class="list-group-item">
<%= radio_button_tag "round", 2 %> Round 2 </li>
<li class="list-group-item">
<%= radio_button_tag "round", 3 %> Round 3 </li>
<li class="list-group-item">
<%= radio_button_tag "round", 4 %> Round 4 </li>
<li class="list-group-item">
<%= radio_button_tag "round", 5 %> Round 5 </li>
</li>
<li class="list-group-item">
<%= radio_button_tag "mark_present", "present" , true %> Present <br>
<%= radio_button_tag "mark_present", "absent" %>Absent
</li><br>
<li class="list-group-item">
<%= submit_tag "Mark Attendance"%></li>
</ul>
<% end %>
</div>
<div class="table-responsive">
<div class="col-md-8">
<table class="table table-hover">
<thead>
<tr>
<th>Mark</th>
<th><%= model_class.human_attribute_name(:team_id) %> ID</th>
<th><%= model_class.human_attribute_name(:event_id) %> Name</th>
<th><%= model_class.human_attribute_name(:round) %></th>
<th><%= model_class.human_attribute_name(:status) %></th>
<th><%=t '.actions', :default => t("helpers.actions") %></th>
</tr>
</thead>
<tbody>
<% @attendances.each do |attendance| %>
<tr>
<td><%= check_box_tag "a_ids[]", attendance.id %></td>
<td><%= attendance.team_id %></td>
<td><%= attendance.event_id %></td>
<td><%= attendance.round %></td>
<td><%= attendance.status %></td>
<td>
<%if admin_signed_in? %>
<%= link_to t('.edit', :default => t("helpers.links.edit")),
edit_attendance_path(attendance), :class => 'btn btn-default btn-xs' %>
<%= link_to t('.destroy', :default => t("helpers.links.destroy")),
attendance_path(attendance),
:method => :delete,
:data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) },
:class => 'btn btn-xs btn-danger' %>
<%end%>
<%= link_to t('.show', :default => t("helpers.links.View details")),
attendance, :class => 'btn btn-default btn-xs' %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<% end %>
控制器代码:
def pattendance
params[:a_ids]
if params[:mark_present]=="present"
Attendance.where(id: params[:a_ids]).update_all(status: 'Present', round: params[:round])
else
Attendance.where(id: params[:a_ids]).update_all(status: 'Absent', round: params[:round])
end
redirect_to attendances_url
end
实施此方法的目的是标记在特定事件中注册的所有团队的出席情况。 存在复选框以选择多个团队。 我选择“Attendance.ids”是因为一个团队可以参加多个活动。因此,选择 Team IDS 可以标记该团队在所有活动中的出席情况。 为了让每个活动都独一无二,我使用了出席 ID。
从单选按钮和 status(出席或缺席)中选择 rounds 并点击 mark出席 submit_tag 后,它应该会更新选中的复选框。 但 有时会传递值,有时则不会。
请告诉我这段代码有什么问题。这真的很有帮助。
控制台: 我尝试将选中的复选框更新为“2”,状态为“存在”
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2uzivV42tLjwuUd+QyEHvL6tCa8ZCE8xRbgJ5k7ueEcV9oaQt5yLafKmZTiFceZEY9B3wyY52qxL1f0hvqQ47A==", "round"=>"2", "mark_present"=>"present", "commit"=>"Mark Attendance"}
协调器负载 (0.1ms)
SELECT "coordinators".* FROM "coordinators" WHERE "coordinators"."id" = ? ORDER BY "coordinators"."id" ASC LIMIT 1 [["id", 1]] SQL (0.2ms)
更新“出席”设置“状态”=“出席”,“回合”= 1,其中“出席”。“id”为空 出勤负载 (0.1ms) SELECT "attendances".* FROM "attendances" WHERE "attendances"."id" IS NULL 重定向到http://localhost:3000/attendances Completed 302 Found in 5ms (ActiveRecord: 0.4ms)
点击提交按钮后没有传递选中的复选框值。 当我从显示页面返回到索引页面时,这些值不会更新。但刷新后它始终有效
【问题讨论】:
-
您不能在 Ruby 上下文中使用
checked="checked"。您所做的只是创建一个名为checked的局部变量,其值为"checked"。 -
感谢指出。但这可以解决我的问题吗?
-
实际上它是一个在表单加载时预选单选按钮的属性,现在所有单选按钮都没有被预选。
-
不,你错了。这不是 Ruby 的工作方式。
radio_button_tag的第三个参数是一个 boolean,它指示是否检查该字段。您使用的是checked="checked",纯属巧合。默认检查无线电标签的正确方法是简单地使用radio_button_tag "round", 1, true。 -
谢谢我已经更改了我的代码,但仍然有一些问题:|提交按钮每次都无法正常工作:(
标签: html ruby-on-rails ruby ruby-on-rails-4