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

Javascript 将值从JQuery传递到我的模型并更新数据库,javascript,ruby-on-rails-3,jquery,ruby-on-rails-3.2,Javascript,Ruby On Rails 3,Jquery,Ruby On Rails 3.2,我在Register模型中得到了学生的列表,以及一个名为StudentRegisters的联接表 一个寄存器有许多学生,一个学生可以属于许多寄存器 起初,我希望能够在register/1或register#show等中标记学生的出席/缺席,但我创建了一个名为register的新页面,该页面可以通过进入register/1/register来访问,在register controller中看起来是这样的: def registration @studentregister = StudentR

我在
Register
模型中得到了
学生的列表,以及一个名为
StudentRegisters
的联接表

一个
寄存器
有许多学生,一个
学生
可以属于许多
寄存器

起初,我希望能够在
register/1
register#show
等中标记学生的出席/缺席,但我创建了一个名为
register
的新页面,该页面可以通过进入
register/1/register
来访问,在
register controller
中看起来是这样的:

def registration
  @studentregister = StudentRegister.find_all_by_register_id(params[:id])
end
以下是该页面的屏幕截图:

计划是,学生刷卡,在文本字段中读取,然后在
student
表中查找该值,即
student.find\u by_card\u id',如果该学生存在且存在于当前表中,选中
present
复选框,并在
time of Arrival
字段中显示当前时间,最后将两个更改的属性保存在
StudentRegister`模型中,以便保存它们的出勤情况。如果用户不存在,则什么也不会发生,或者如果学生存在于数据库中但不在当前表中,则可能会显示一条消息,或者干脆忽略它

我已经尝试了很多让表格显示和更新的方法,目前每一行本身都是一个表单,并附带了一个隐藏的提交按钮,该按钮通过复选框的
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>
我还创建了一些JQuery来测试它是如何工作的,但是每当我选中一个复选框时,它不会提交表单,每当我在
到达时间
字段中得到一个要保存的时间,然后提交表单时,它不会存储该时间。为什么呢

<script>
    $(function() {
        $("input[name=Card_ID]").keydown(function(e) {
            var id;
            if (e.which === 13) {
            id = this.value;
            alert("That"); //Just to see that it works
            $('#toa_'+id).text('2001-01-01 14:13:46 UTC'); 
//Sets the time for the row which as the toa_id that was entered in the checkbox 
(Remember this is just a test to see how it works, in reality the Student ID should be   checked, not the form ID)
            $('form#edit_student_register_14 input[type="checkbox"]').attr('checked', true);
            alert("This");
        $('form#edit_student_register_14').submit();
        }
    })});

$(函数(){
$(“输入[name=Card\u ID]”)。向下键(函数(e){
变量id;
如果(e.which==13){
id=该值;
警惕(“那”);//只是看看它是否有效
$('#toa'+id).text('2001-01-01 14:13:46 UTC');
//设置作为在复选框中输入的toa_id的行的时间
(请记住,这只是一个测试,看看它是如何工作的,实际上应该检查学生ID,而不是表单ID)
$('form#edit_student _register_14 input[type=“checkbox”]”)。attr('checked',true);
警惕(“本”);
$('form#edit_student_register_14')。提交();
}
})});

首先,您应该确保表单数据正确地登录到服务器页面,而不是错误的URL,这可以通过将服务器端收到的请求输出到web页面来实现。完成后,您就可以在服务器端管理表单数据并继续数据库操作过程

puts params[:blah]
abort
摘自:

完成后,您应该能够在服务器端进行处理,并使用相同的方法进行跟踪

这是使用Chrome浏览器调试网络查询的一种方法,您可以查看传出查询的列表,您可以通过单击
Preserve Log on Navigation
:


我希望这会有所帮助。

您应该将客户端和服务器端发生的问题分开,并分别进行攻击。对于客户端,请检查“开发人员工具”或firebird以了解提交的表单参数。从Rails服务器日志中,找出服务器是否收到了请求。出于调试目的,我通常用save替换save!这样我就可以跟踪哪些验证失败了。有没有关于您的意思的分步说明?不太熟悉web浏览器的调试器这应该会对您有所帮助:除了调试之外,我更感兴趣的是通过AJAX和JQuery编写数据库。有没有相关的说明?Javascript在客户端浏览器上执行,web应用程序在web服务器上执行,而web服务器很可能正在运行数据库服务器。因此,javascript应该向web服务器发出HTTP请求(POST或PUT请求),web服务器应该在rails应用程序上执行控制器操作,您应该将要写入数据库的代码放入其中。
puts params[:blah]
abort