0

次の3つのテーブルがあります。

StudentRegisterおよびと呼ばれる結合テーブルStudent_Registerここに画像の説明を入力してください

理解しやすくするために、それぞれのモデルを次に示します。

class Register < ActiveRecord::Base
  has_many :student_registers
  has_many :students, :through => :student_registers
  belongs_to :event
  attr_accessible :date, :student_ids, :module_class_id, :event_id
end

class Student < ActiveRecord::Base
  has_many :student_registers
  has_many :registers, :through => :student_registers
  attr_accessible :first_name, :last_name, :university_id
end

class StudentRegister < ActiveRecord::Base
  belongs_to :register
  belongs_to :student
  attr_accessible :present, :register_id, :student_id, :time_of_arrival
  default_scope :order => 'present DESC'
end

だから今私がやりたいのは、Registerコントローラーを使用して特定のレジスターを開き、ページ上でそのレジスターをマークすることregister/1/registrationです。それはうまくいきます。ただし、現時点で私が持っているのは次のとおりです。 ここに画像の説明を入力してください 各チェックボックスには送信ボタンが付いていますが、を使用して非表示にし:style => 'display: none'ました。次のコードは、何が起こっているのかをよりよく理解できる可能性があります。

register/registration.html.erb

<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><div class="present"><%= streg.check_box :present, :onChange => "submit()"%>  </div>
        <%= streg.submit :style => 'display: none' %></td>
            <td><%= streg.label Student.find(t.student_id).university_id %></td>
            <td><%= streg.label Student.find(t.student_id).first_name %></td>
            <td><%= streg.label Student.find(t.student_id).last_name %></td>
            <% if t.time_of_arrival %>
            <td><%= streg.label t.time_of_arrival.strftime('%H:%M:%S%P')%></td>
                <% else %>
            <td><%= streg.label " "%></td>
                <% end %>
             </tr>
    <% end %>
    <% end %>
</table>

そのページのソースは次のようになります。

ここに画像の説明を入力してください

私がやりたいことは次のとおりです。

テキストボックスに入力されたテキストがUniversity ID学生のテキストの1つと一致する場合、対応するチェックボックスをオンにします。理論的には、チェックボックスをオンにすると、そのフォームが自動的に送信され、「hey presto」、更新されます。

これは私の現在のJS/Coffeescriptコードです。

registers.js.coffee

$("input[name=Card_ID]").keyup ->
  if @value.length > 3
    $("input[name=\"student_register[present]\"]").prop "checked", true
  else
    $("input[name=\"student_register[present]\"]").prop "checked", false

主にJS/Coffeescriptの知識が0であるだけでなく、テキストボックスの長さが3より大きい場合にチェックする必要があるかどうかを確認したかったため、このコードは希望どおりに機能しないことを知っています。 1つまたはすべてのチェックボックス(これはあまり明確ではなく、チェックボックスのは同じであるため、このコードが何をチェックするかはわかりません)が、機能しません。

University IDRubyコードを使用してを検索し、学生と照合する方法すらわかりません。私は今、文字通り混乱しています。これで3日間です。

4

1 に答える 1

0

ジャンボ サイズの説明 O_O をめぐって、あなたの質問をサーフィンさせようとしています。私が正しければ、次のようなものが必要です。

フォームにはid属性があります。それを使用してください。HTML の構造を見てみましょう。

# Each 'student_register' form has an id "edit_student_register_#{id}"
# where id is the object's id
# Inside each of these forms there is a check box with name "student_register[present]"

<form id="edit_student_register_15">
  <input name="student_register[present]"/>
</form>

# So you need to get that input with a selector like this:
$("input[name=Card_ID]").keyup (e)->
  if e.wich is 13 # If enter key is pressed...
    id = this.text # To interpolate in the selector below
    $("form#student_register_#{id} input[name='student_register[present]']").attr 'checked', true

ブラウザー コンソールで遊んで、セレクターが何を表示しているかを確認してください。

于 2013-03-18T15:00:31.897 に答える