回到我之前提到过的一个例子,我会尽量让这个问题变得简单。
假设我有用户和文档模型。
用户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,但不会这样,但我担心这不是最好的方法。除了现在可以通过批量分配(根据我的理解)访问属性之外,我没有其他理由担心。
我是以错误的方式解决这个问题,还是有更好的方法来创建和测试所有关联?
答案 0 :(得分:1)
class User < ActiveRecord::Base
has_many :edits, :through => :documents
has_many :documents
end