我无法弄清楚如何使用引用父类的 has_many/belongs_to 关系为我的类设置工厂。它设置如下。
class PrivateMessage < ActiveRecord::Base
attr_accessible :body, :read_at, :title, :receiver_id, :sender_id, :conversation_id
belongs_to :sender, class_name: 'Profile', foreign_key: 'sender_id'
belongs_to :receiver, class_name: 'Profile', foreign_key: 'receiver_id'
belongs_to :conversation, :class_name => 'PrivateMessage' # Reference to parent message
has_many :replies, :class_name => 'PrivateMessage', :foreign_key => 'conversation_id',
order: 'created_at DESC'
我不知道如何处理这个问题,或者在这种情况下我是否应该使用工厂。在我的控制器中,如果 conversation_id 通常为 nil,我会创建一条消息(使用 profile.sent_messages.build),否则如果发送方/接收方之间有任何消息,我会引用父消息,并使用 parent_message.replies.build 构建它.
我想我需要某种带有 after_build 钩子的嵌套工厂,但我不能完全理解如何去做。像这样的东西?我在上面定义私人消息的地方。这显然是错误的,但我在正确的轨道上吗?如何使用 after_build 块引用父消息?
factory :private_message do
sequence(:body) { |n| "This is a body of a message :) #{n}" }
association :sender
association :receiver
end
factory :reply do
association :private_message
sequence(:body) { |n| "This is the body of a reply #{n}" }
association :sender
association :receiver
after_build do |private_message|
private_message.replies << :reply
end
end