【发布时间】:2011-01-06 06:00:44
【问题描述】:
我有以下三个模型:User、Project 和 Assignment。
用户has_many 通过分配进行项目。但是,Assignment 实际上有两个与用户相关的外键:user_id(代表被分配项目的用户)和completer_id(代表完成项目的用户)。 p>
通常,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 时会忽略此选项,所以我想知道如果没有它,是否有办法做到这一点。
最后,我应该提一下,我对其他设计持开放态度,如果不能以这种方式完成并且有人可以想到更好的方法。
【问题讨论】:
-
欢迎尝试使用 ActiveRecord 做一些中等复杂的事情。 :)
标签: ruby-on-rails model associations has-many-through