Students
モデル内の のリストRegister
と、 という結合テーブルを取得しましたStudentRegisters
。
ARegister
には多くの生徒がいて、 A は多くの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
の Time of Arrival field, and finally save both changed attributes in the
StudentRegister` モデルで検索され、出席が保存されます。ユーザーが存在しない場合は何も起こりません。学生が 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="✓" /><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>
また、それがどのように機能するかをテストするためにいくつかの 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();
}
})});