使用与两个belongs_to关系的关联构建活动记录

时间:2011-03-05 14:42:15

标签: ruby-on-rails-3 rspec

回到我之前提到过的一个例子,我会尽量让这个问题变得简单。

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

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

我想介绍一个属于Document并且属于User的Edits模型。用户可以是任何用户,不一定是创建文档的用户。有了这个新模型,Document现在有了_many:edits和User has_many:edits。

到目前为止它看起来像:

# 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,但不会这样,但我担心这不是最好的方法。除了现在可以通过批量分配(根据我的理解)访问属性之外,我没有其他理由担心。

我是以错误的方式解决这个问题,还是有更好的方法来创建和测试所有关联?

1 个答案:

答案 0 :(得分:1)

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