0

私はそのような2つのモデルを持っています

 class User < ActiveRecord::Base

   attr_accessible :email, :password, :password_confirmation, :remember_me, :fname, :lname
 end

 class Course < ActiveRecord::Base

  belongs_to :university
   attr_accessible :course_code, :department, :name, :path, :university_code, :department_code

 set_primary_key :course_code
end

現在、ユーザーは多くのコースを受講でき、コースには多くのユーザーがいる可能性があります。また、結合テーブルには、ユーザーが受講しているコースのステータス、完了した可能性のある講義など、いくつかの属性があります。

リレーションシップを作成するにはどうすればよいですか?

4

1 に答える 1

2

コースに「一意性」の概念がある場合は、中間モデル (例: UserCourseResults) が必要になるため、データベースの任意の状態で、各コースを一意にすることができます。次に、次のように整理します。

User:
  has_many    :user_course_results
  has_many    :courses, through: user_course_results
Course:
  has_many:   :user_course_results
  has_many:   :users, through: user_course_results
UserCourseResult:
  attr_accessible :result # So each user can have a result on each course, for instance.
  belongs_to  :user
  belongs_to: :course

中間モデルのポイントがわかりますか?

HTH、

ピエール。

編集: あなたの編集を見たところですが、これはまさにあなたが考えていたことだと思います。User モデルはユーザーごとに一意のデータのみを保持することに注意する必要があります。同じ概念が Course モデルにも当てはまります。したがって、ユーザーコース固有のデータを保持するこの中間「UserCourseResult」モデルを使用するのがおそらく最善でしょう...この種の関係は、ユーザーとコース間のリンクに加えて中間データが必要ない場合、 HABTM (多くのものを所有し、所有する) と呼ばれます。アクティブ レコード ドキュメントのこの特定のセクションを確認する必要があります (has_many: through => * および has_and_belongs_to_many を参照)。

于 2012-07-19T01:28:23.710 に答える