2

わかりました、修正する必要がある2つの問題があると思います

次のテーブルが StudentありますRegister:ここに画像の説明を入力

Register_Studentsを介してテーブルを作成する必要がありましたrails g migration CreateStudentRegister。これは次のようになります。

class CreateStudentRegister < ActiveRecord::Migration
    def change
    create_table :registers_students, :id => false do |t|
    t.integer  :register_id
    t.integer :student_id
    t.boolean :present
    t.time :time_of_arrival
  end
 end
end

今、私はすべての登録簿に多数の学生を配置し、すべての学生に対してpresent真/偽のステータスを持たせたいと考えています。また、すべての学生にもtime_of_arrival時間がある必要があります。time_of_arrivalただし、またはpresent属性を設定したいので、属性にアクセスする方法がありません。

すべての学生のこれらの属性を変更する方法はregister/show.html.erb、次のコードを使用することです。

<% @register.students.each do |student| %>
  <tr>
      <td><%= Register.find(@register).present %></td>         #Doesn't work
      <td><%= student.university_id%></td>
      <td><%= student.first_name.titlecase%></td>
      <td><%= student.last_name.titlecase%></td>
      <td><%= Register.find(@register).time_of_arrival %></td> #This doesn't work
      <td><%= student.time_of_arrival%></td>                   #Nor does this

  </tr>
  <% end %>
</table>

ページに表示したい理由は、show出席または欠席のマークを付けてレジスタを編集できるようにするためであり、チェックボックスを使用して到着時間をマークすることもできます (その部分はまだ実装されていません)。 、しかし、あなたの誰かがそれを実装する方法を知っているなら、私はそれについて聞きたいです)。

事前に答えてくれてありがとう

編集:追加されたモデル

のモデルStudents:

class Student < ActiveRecord::Base
  has_and_belongs_to_many :registers
  validates :university_id, :length => { :minimum => 10}, #Checks that the University ID is 10 characters long
            :uniqueness => {:case_sensitive => false}, #Checks that the University ID is unique, regardless of case-sensitivity
        :format => { :with => /[wW]\d\d\d\d\d\d\d\d\d/, #University ID needs to be in the right format via regex
                     :message => "Needs to be in the right format i.e. w123456789"}

  default_scope :order => 'LOWER(last_name)' #Orders the students via last name
  attr_accessible :first_name, :last_name, :university_id

  def name
    first_name.titlecase + " " + last_name.titlecase
  end
end

これは、Register

class Register < ActiveRecord::Base
  has_and_belongs_to_many :students
  belongs_to :event
  attr_accessible :date, :student_ids, :module_class_id, :event_id
end
4

2 に答える 2

2

関連付けを実装する必要がありますhas_many :through

これについてはレールガイドを参照してください。 http://guides.rubyonrails.org/association_basics.html

于 2013-03-09T22:49:37.963 に答える
2

更新 register_students テーブルにアクセスするには、モデルを設定する必要があります

そのテーブル名は、Rails の規則や通常の意味論に従っていないので、お勧めできますか

1) 1 回の移行でデータベースをロールバックします (このテーブルの作成が最後の移行であると仮定します)。

rake db:rollback

2) db/migrations フォルダーから移行を削除します。

3) 組み込みの Rails モデル ジェネレーターを使用する

rails g model student_register register_id:integer student_id:integer #etc

データベースを移行してから、ビューで使用できるように、has_many と belongs_to の関係を設定します。

これで、生徒ごとに Student_registers 配列が作成され、ループしてEnd updateで現在のフィールドにアクセスできます。

1)

  <td><%= Register.find(@register).present %></td>         #Doesn't work

@register のインスタンスがすでにあるので、同じデータベースを見つけるためにデータベースを再度読み取る必要はありません。@register オブジェクトで直接必要な属性を使用するだけです

<td><%= @register.present %></td>

悪い設計ですが、元のコードは機能するはずです

それでもうまくいかない場合は、提供された小さな情報では推測できない、より根本的な問題があるため、戻って質問を編集し、その場合はコメントを残してください。

2)

同じことが言えます

  <td><%= Register.find(@register).time_of_arrival %></td> #This doesn't work

3)

そして、あなたはこれがうまくいかないと言うので

  <td><%= student.time_of_arrival%></td>                   #Nor does this

機能していないというあなたの発言を疑うようになり、完全に機能していると示唆するようになりました。おそらく、それらのフィールドに表示するデータがありません。したがって、いくつかのデータを入力すると、すべてがうまくいきます。

4) Rails ヘルパーを使用して画面上の複数のレコードを編集するには、主に 3 つの方法があります。fields_for を読むことをお勧めします

出発点としてhttp://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

また、このhttp://railscasts.com/episodes/198-edit-multiple-individuallyもチェックしてください Ryan Bates はこの件に関して他の railscast を行っているので、その Web サイトをトロールしてください。

于 2013-03-09T21:56:18.477 に答える