2

Studentsモデル内の のリストRegisterと、 という結合テーブルを取得しましたStudentRegisters

ARegisterには多くの生徒がいて、 A は多くのStudentに属することができRegistersます。

register/1もともと、またはなどで学生の在席/欠席をマークできるようにしたかったのですがregister#show、代わりに という新しいページを作成しました。これは、たとえばにregistration行くことでアクセスできます。register/1/registrationregister 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の Time of Arrival field, and finally save both changed attributes in theStudentRegister` モデルで検索され、出席が保存されます。ユーザーが存在しない場合は何も起こりません。学生が DB に存在するが現在のテーブルに存在しない場合は、メッセージを表示するか、単に無視します。

ここに画像の説明を入力

私はテーブルを表示して更新することで多くのことを試しました.現在、すべての行はそれ自体がフォームであり、チェックボックスの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メソッドを使用する代わりにcontent_tag、各行に ID を与えるために使用しました (以前に回答した質問のおかげです)。それが正しい方法かどうかはわかりませんが、私のソース コードは次のようになります。

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

また、それがどのように機能するかをテストするためにいくつかの JQuery を作成しましたが、チェックボックスをオンにするたびにフォームを送信せず、Time of Arrivalフィールドに保存する時間を取得してからフォームを送信します、その時間は保存されません。何故ですか?

<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();
        }
    })});

4

1 に答える 1

0

最初にすべきことは、フォーム データが間違った URL ではなく、サーバー ページに正しく到達していることを確認することです。これは、サーバー側で受信した要求を Web ページに出力することで実行できます。これが完了すると、サーバー側でフォーム データを管理し、データベース操作プロセスを続行できます。

puts params[:blah]
abort

取得元:アクションから、ポスト変数を取得し、ページに出力してから、実行を停止します

これが完了すると、サーバー側で処理を行い、同じ方法で追跡を続けることができるはずです。

これは、Chrome ブラウザーを使用してネットワーク クエリをデバッグする 1 つの方法です。送信クエリのリストを表示できます。次のようにクリックすると、ネットワーク トラフィックを保存できますPreserve Log upon Navigation クリックすると、このボタンは赤色になります

Chrome ネットワークのデバッグ

これが役立つことを願っています。

于 2013-03-27T17:58:07.330 に答える