0

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

1 に答える 1

0

質問を理解したら...

このようなことは意味がありますか?

factory :private_message do
  sequence(:body) { |n| "This is a body of a message :) #{n}" }
  association :sender
  association :receiver

  factory :reply do
    sequence(:body) { |n| "This is the body of a reply #{n}" }
    association :conversation
  end
end

あなたはあなたの人生を別のモデルに会話を分割することをより簡単にするかもしれません...

于 2012-08-21T16:59:24.547 に答える