将值从JQuery传递到我的模型并更新数据库

时间:2013-03-21 16:45:22

标签: javascript ruby-on-rails-3 jquery ruby-on-rails-3.2

我在Students模型中获得了Register的列表,以及一个名为StudentRegisters的连接表。

Register有很多学生,而Student可以属于许多Registers

最初我希望能够在register/1register#show等标记出现/缺席的学生,但是我创建了一个名为registration的新页面,可以通过访问例如register/1/registration,在register controller

中看起来像这样
def registration
  @studentregister = StudentRegister.find_all_by_register_id(params[:id])
end

以下是该页面的截图:

enter image description here

计划是什么,是学生刷卡,这会在文本字段中读取,然后在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`模型,以便保存他们的出勤率。如果用户不存在则没有任何反应,或者如果学生存在于数据库但不存在于当前表中,则可能显示消息,或者只是忽略它。

enter image description here

我已经玩了很多东西,让表格显示和更新,目前每一行都是一个表格本身,并附有一个隐藏的提交按钮,通过复选框{{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="&#x2713;" /><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="&#x2713;" /><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>

1 个答案:

答案 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即可保存网络流量 Once clicked this button becomes RED

Chrome Network Debugging

我希望这会有所帮助。