我有以下三个模型:用户、项目和分配。
用户has_many
通过作业进行项目。但是,Assignment 实际上有两个与用户相关的外键:(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
用作模型中 User 的外键:through
,而不是:user_id
. 是否有可能做到这一点?
而且,顺便说一句,我知道这个:foreign_key
选项。但是,使用 时会忽略此选项:through
,因此我想知道是否有办法在没有它的情况下执行此操作。
最后,我应该提到我对其他设计持开放态度,如果不能以这种方式完成并且有人可以想到更好的方法。