Ruby on rails FactoryGirl与递归模型
我很难弄清楚如何为引用父类的has\u many/behing\u to关系的类设置工厂。它的设置如下所示Ruby on rails FactoryGirl与递归模型,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我很难弄清楚如何为引用父类的has\u many/behing\u 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
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'
class PrivateMessage“PrivateMessage”#对父消息的引用
有多个:回复,:class\u name=>'PrivateMessage',:foreign\u key=>'conversation\u id',
订单:“在描述处创建”
我有点不知所措,不知如何处理这个问题,或者在这种情况下我是否应该使用工厂。在我的控制器中,如果对话\u id通常为零(使用profile.sent\u messages.build),我将创建一条消息,否则,如果发送方/接收方之间存在任何消息,我将引用父消息,并使用父消息\u message.repress.build来生成它
我想我需要一个带有后构建钩子的嵌套工厂,但我不知道该怎么做。像这样的?我在上面定义了私有消息。这显然是错误的,但我走对了吗?如何使用after_构建块引用父消息
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
factory:private\u消息do
sequence(:body){n}“这是一条消息的正文:){n}”
关联:发件人
协会:接收人
结束
工厂:回复吗
关联:私有消息
sequence(:body){n}“这是回复的主体{n}”
关联:发件人
协会:接收人
|构建完成后|私人|消息|
private_message.repress如果我理解这个问题
像这样的事情有意义吗
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
您可能会让您的生活更轻松,将对话分成一个单独的模式…非常有效,谢谢。我花了一分钟才意识到我需要使用let!而不是让它工作,但这很简单。谢谢你的帮助。