ユーザー、プロジェクト、割り当ての3つのモデルがあります。
ユーザーhas_many
は割り当てを通じてプロジェクトを作成します。ただし、Assignmentには、実際にはユーザーに関連する2つの外部キーがあります:(user_id
プロジェクトを割り当てられたユーザーをcompleter_id
表す)と(プロジェクトを完了したユーザーを表す)。
多くの場合、同じuser_id
にcompleter_id
なります(プロジェクトを割り当てられたユーザーがプロジェクトを完了した場合)。ただし、別のユーザーがそれを完了すると、user_idとcompleter_idは異なります。
私のユーザーモデルには、次のものがあります。
class User < ActiveRecord::Base
has_many :assignments
has_many :incomplete_assignments, :class_name => 'Assignment',
:conditions => 'completer_id IS NULL'
has_many :completed_assignments, :class_name => 'Assignment',
:foreign_key => 'completer_id'
# this is the important one
has_many :incomplete_projects,
:through => :assignments,
:source => :project,
:conditions => 'completer_id IS NULL'
end
モデル内のユーザーの外部キーとして、ではなく:completed_projects
を使用する、と呼ばれる別の関連付けを作成したいと思います。これを行うことは可能ですか?completer_id
:through
:user_id
そして、余談ですが、私はその:foreign_key
選択肢を知っています。ただし、を使用する場合はこのオプションが無視されるため、このオプションを使用:through
せずにこれを行う方法があるかどうかを知りたいと思います。
最後に、この方法でそれを行うことができず、誰かがより良い方法を考えることができる場合、私は他のデザインを受け入れることを言及する必要があります。