开发自定义消息系统(是的,我知道......还有另一个)。
我有:
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
我正在努力保持我的控制器简单,并在单个事务中进行对话和消息创建。
答案 0 :(得分:1)
我想我已经明白了。
而不是before_create我知道
before_validation :assign_to_conversation, :on => :create, :unless => :conversation
现在一切似乎都有效。所有这些都包含在交易中。
有什么想法吗?
答案 1 :(得分:0)
尝试用build_conversation
替换create_conversation
?