我在Students
模型中获得了Register
的列表,以及一个名为StudentRegisters
的连接表。
Register
有很多学生,而Student
可以属于许多Registers
。
最初我希望能够在register/1
或register#show
等标记出现/缺席的学生,但是我创建了一个名为registration
的新页面,可以通过访问例如register/1/registration
,在register controller
:
def registration
@studentregister = StudentRegister.find_all_by_register_id(params[:id])
end
以下是该页面的截图:
计划是什么,是学生刷卡,这会在文本字段中读取,然后在Student
表中查找该值,即Student.find_by_card_id', and if the student exists and is present in the current table, check the
现在checkbox and display the current time in the
到达时间field, and finally save both changed attributes in the
StudentRegister`模型,以便保存他们的出勤率。如果用户不存在则没有任何反应,或者如果学生存在于数据库但不存在于当前表中,则可能显示消息,或者只是忽略它。
我已经玩了很多东西,让表格显示和更新,目前每一行都是一个表格本身,并附有一个隐藏的提交按钮,通过复选框{{1功能。
自己看看:
onClick
我也玩弄了显示数据,因此我使用<table border="1">
<%= text_field_tag 'Card_ID',nil, :autofocus => true %>
<tr><td>Present</td>
<td>University ID</td>
<td>First Name</td>
<td>Last Name</td>
<td>Time of Arrival</td>
</tr>
<tr>
<% @studentregister.each do |t| %>
<%= simple_form_for t do |streg| %>
<td><%= streg.check_box :present, :onChange => "submit()", :class => 'student_present'%>
<%= streg.submit :style => 'display: none' %></td>
<td><%= content_tag :span, Student.find(t.student_id).university_id, :id => "#{t.student_id}"%></td>
<td><%= streg.label Student.find(t.student_id).first_name %></td>
<td><%= streg.label Student.find(t.student_id).last_name %></td>
<td><%= content_tag :span, t.time_of_arrival, :id => "toa_#{t.student.id}" %> </td>
</tr>
<% end %>
<% end %>
</table>
而不是使用Simple_Form的label
方法,以便为每一行提供一个ID(感谢先前回答的问题)。不确定这是否正确,但我的源代码如下:
content_tag
我还创建了一些JQuery来测试它是如何工作的,但每当我得到一个复选框进行检查时,它都不会提交表单,每当我有时间保存在{{1}中}字段,然后提交表单,它不存储那个时间。那是为什么?
<table border="1">
<input autofocus="autofocus" id="Card_ID" name="Card_ID" type="text" />
<tr><td>Present</td>
<td>University ID</td>
<td>First Name</td>
<td>Last Name</td>
<td>Time of Arrival</td>
</tr>
<tr>
<form accept-charset="UTF-8" action="/student_registers/14" class="simple_form edit_student_register" id="edit_student_register_14" method="post" novalidate="novalidate">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" />
<input name="authenticity_token" type="hidden" value="c8B0JGs4ZLVILa4a4r4PJJrD/zFcLCDhTLscBKHbFeE=" /></div>
<td><input name="student_register[present]" type="hidden" value="0" />
<input class="student_present" id="student_register_present" name="student_register[present]" onChange="submit()" type="checkbox" value="1" />
<input name="commit" style="display: none" type="submit" value="Update Student register" /></td>
<td><span id="3">w122341434</span></td>
<td><label class="string optional control-label" for="student_register_Michael">Michael</label></td>
<td><label class="string optional control-label" for="student_register_Jones">Jones</label></td>
<td><span id="toa_3"></span> </td>
</tr></form>
<form accept-charset="UTF-8" action="/student_registers/15" class="simple_form edit_student_register" id="edit_student_register_15" method="post" novalidate="novalidate">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" />
<input name="authenticity_token" type="hidden" value="c8B0JGs4ZLVILa4a4r4PJJrD/zFcLCDhTLscBKHbFeE=" /></div>
<td><input name="student_register[present]" type="hidden" value="0" />
<input class="student_present" id="student_register_present" name="student_register[present]" onChange="submit()" type="checkbox" value="1" />
<input name="commit" style="display: none" type="submit" value="Update Student register" /></td>
<td><span id="7">w678941512</span></td>
<td><label class="string optional control-label" for="student_register_Stewie">Stewie</label></td>
<td><label class="string optional control-label" for="student_register_Lee">Lee</label></td>
<td><span id="toa_7"></span> </td>
答案 0 :(得分:0)
首先要考虑的是,确保您的表单数据正确登陆服务器页面,而不是错误的URL,这可以通过将服务器端收到的请求输出到网页来完成。完成后,您可以在服务器端管理表单数据并继续数据库操作过程。
puts params[:blah]
abort
取自:From an action, get a post variable, output to page, then halt execution
完成此操作后,您应该能够在服务器端进行处理并使用相同的方式继续跟踪。
这是使用Chrome浏览器调试网络查询的一种方法,您可以看到外发查询列表,点击Preserve Log upon Navigation
即可保存网络流量
:
我希望这会有所帮助。