2011-03-05 63 views
1

回到我之前问过的一个例子,我会尽量让这个问题尽可能简单。建立一个关联到两个belongs_to关系的活动记录

假设我有用户和文档模型。

用户has_many文档和文档belongs_to用户。这种关系今天运作良好。

我想介绍一个属于文档和belongs_to用户的编辑模型。用户可以是任何用户,不需要创建文档的人。有了这个新模型,文档现在has_many:编辑和用户has_many:编辑。

到目前为止,它看起来像:

# user.rb 
class User < ActiveRecord::Base 
    has_many :edits 
    has_many :documents 
end 

# document.rb 
class Document < ActiveRecord::Base 
    belongs_to :user 
    has_many :edits 
end 

# edit.rb 
class Edit < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :document 
end 

当我通过用户创建文件,用户和文件之间的关联是在两个方向上精细(user.documents和document.user)

现在,当我想要创建一个编辑时,编辑应该针对文档,但也应该与生成编辑(edit.user)的用户相关联。

当我在我的RSpec测试中构建这个时,我正努力使用“标准”关联方法使关联正确。如果我执行@ user.edits.build({...}),它会将用户关联到返回的Edit对象,但不会关联Document。同样,当我做@ document.edits.build({...})时,它将关联文档而不是用户。

我假设我可以在attr_accessible声明中公开user_id和post_id,但不会这样,但我担心这不是这样做的最佳方式。我没有真正的理由担心,除了现在可以通过大规模任务(从我的理解)获得这些属性。

我是以这种错误的方式去做还是有更好的方法来创建和测试所有的关联?

+0

我想我至少通过RSpec测试发现了一个修复。我不得不添加一个:源元素到用户和编辑。所以用户has_many:personal_edits,:through =>:documents,:source =>:edit,反之亦然。 – 2011-03-05 18:03:47

回答

1
class User < ActiveRecord::Base 
    has_many :edits, :through => :documents 
    has_many :documents 
end 
+0

感谢您的回复,但这并没有解决问题。该问题不是从用户 - >文档 - >编辑。该问题与用户 - >编辑有关,因为相关文档可能不是由用户创建的。 – 2011-03-05 15:39:31

+0

给你+1的答案,至少指着我在正确的方向,谢谢。 – 2011-03-05 18:25:51