Возвращаясь к примеру, о котором я ранее спрашивал, я постараюсь сделать этот вопрос максимально простым.
Предполагается, что у меня есть модели «Пользователь» и «Документ».
Пользователь имеет «много документов», а документ принадлежит «пользователю».Сегодня эти отношения работают нормально.
Я хочу представить модель редактирования, которая принадлежит документу и принадлежит пользователю.Пользователь может быть любым пользователем, не обязательно тем, кто создал документ.В этой новой модели документ теперь имеет has_many: edits, а пользователь 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, редактирование должно быть для документа, но также должно быть связано с пользователем, который сгенерировал редактирование (edit.user).
Когда я строю это в своих тестах RSpec, я изо всех сил пытаюсь получить правильные ассоциации, используя "стандартные" методы ассоциации.Если я сделаю @ user.edits.build ({...}), он будет ассоциировать пользователя с возвращенным объектом редактирования, но не с документом.Аналогично, когда я делаю @ document.edits.build ({...}), он будет ассоциировать документ, но не пользователя.
Я предположил, что мог бы выставить user_id и post_id в объявлении attr_accessible, но не будет этого, но я боюсь, что это не лучший способ сделать это.У меня нет реальной причины бояться, кроме того, что атрибуты теперь доступны через массовое назначение (из того, что я понимаю).
Я поступаю неправильно, или есть лучший способ создать и проверить все ассоциации?