親クラスを参照する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