2

开发自定义消息系统(是的,我知道......还有一个)。Rails:回调中的父级build_association

我:

class Conversation << AR::Base 
    has_many :messages 
end 

class Message << AR::Base 
    belongs_to :conversation 

    # this is what I want, create a conversation if one isn't assigned 
    before_create :assign_to_conversation, :unless => :conversation 

    def 
    # but this won't save parent association 
    build_conversation(:subject => subject, :starter => user) 
    end 
end 

基本上,我希望能够跟踪邮件作为一个对话的一部分。如果用户发送新的信息,它应该成为新对话的一部分。如果msg是对现有convo的回复,我只想将该消息分配给该特定对话。

在messages_controller我想只是做

,而不必去与

def create 
    transaction do 
     c = Conversation.build(...) 
     c.messages.build(params[:message]) 
     c.save 
    end 
end 

我试图让我的控制器简单,还开展对话和消息作为创作的一部分单笔交易。

回答

1

我想我明白了。

相反before_create的,我知道有

before_validation :assign_to_conversation, :on => :create, :unless => :conversation 

一切似乎现在的工作。而且全部都包含在交易中。

有什么想法?

0

试图用create_conversation替换build_conversation

+0

Yeap。也不起作用。 – Swartz 2011-02-17 10:59:43