Rails:回调中的父build_association

时间:2011-02-17 06:04:38

标签: ruby-on-rails transactions callback associations parent-child

开发自定义消息系统(是的,我知道......还有另一个)。

我有:

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
  @message.save(params[:message]).
end

无需使用

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

我正在努力保持我的控制器简单,并在单个事务中进行对话和消息创建。

2 个答案:

答案 0 :(得分:1)

我想我已经明白了。

而不是before_create我知道

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

现在一切似乎都有效。所有这些都包含在交易中。

有什么想法吗?

答案 1 :(得分:0)

尝试用build_conversation替换create_conversation