2

アプリに Student モデルと Teacher モデルがあります。生徒が複数回完了できるタスクを教師が作成できるようにしたいのですが、生徒も自分のタスクを作成できるようにしたいと考えています。これは私の現在のモデル構造です:

class Task < ActiveRecord::Base
 belongs_to :teacher
 belongs_to :student
 has_many :completed_tasks

class Student < ActiveRecord::Base
 belongs_to :teacher
 has_many :tasks
 has_many :completed_tasks

class Teacher < ActiveRecord::Base
 has_many :students
 has_many :tasks

class CompletedTask < ActiveRecord::Base
 belongs_to :student
 belongs_to :task

私の見解では、教師が生徒のためにタスクを追加できるようにしたいと考えています。生徒が自分のタスクを表示すると、教師の利用可能なタスクが表示され、独自のタスクを追加できます。次に、生徒は別のビューでタスクを完了としてマークします。これにはポリモーフィック アソシエーションの使用を検討する必要がありますか? 私の状況は、Ryan Bates の Railscast #154で使用されている方法とは少し異なるようです。教師と生徒がタスクとやり取りする方法が少し異なるためです。

4

1 に答える 1

5

多態的な関連付けを使用してTask、タスクの作成者を示します。教師が作成したものではないタスクを使用できる場合を除き、Teacherとの関連付けは不要な場合があります。その場合は、現在の教師への関連付けを保持しますが、そうでない場合は、作成者への関連付けのみが必要です。Task

の代わりに、タスクと生徒の両方に属し、デフォルトで false に設定されるフラグを持つCompletedTaskというクラスを使用します。これにより、タスクが進行中であるか完了しているかにかかわらず、どの学生にどのタスクが割り当てられているかを追跡できます。Assignmentcompleted

class Task < ActiveRecord::Base
  belongs_to :creator, :polymorphic => true

  has_many :assignments
  has_many :assigned_students, :through => :assignments, :source => :student
end

class Student < ActiveRecord::Base
  belongs_to :teacher
  has_many :created_tasks, :as => :creator, :class_name => 'Task'

  has_many :assignments
  has_many :assigned_tasks, :through => :assignments, :source => :task
end

class Teacher < ActiveRecord::Base
  has_many :students
  has_many :created_tasks, :as => :creator, :class_name => 'Task'
end

class Assignment < ActiveRecord::Base
  belongs_to :student
  belongs_to :task

  scope :complete, where(:completed => true)
  scope :incomplete, where(:completed => false)
end
于 2012-06-23T22:25:18.713 に答える