1

查看了许多资源,似乎无法弄清楚这一点。

我正在开发一个基于 BinaryMuse 代码的消息传递系统:

https://github.com/BinaryMuse/so_association_expirement/compare/53f2263...master

它没有响应功能,所以我正在尝试构建它。

我将以下代码添加到 UserConversations 控制器:

def update
    @user = User.find params[:user_id]
    @conversation = UserConversation.find params[:id]
    @conversation.user = current_user
    @message = @conversation.messages.build
    @message.conversation_id = @conversation
    @message.save
    redirect_to user_conversation_path(current_user, @conversation)
end

以下是 UserConversations#show 视图:

<%= form_for(@conversation) do |f| %>
<%= f.fields_for :messages do |m| %>
    <div>
        <%= m.label :body %><br />
        <%= m.text_area :body %>
    </div>
<% end %>
<%= f.submit %>

有了我所拥有的,就会创建一条具有正确会话 ID 的新消息。但是,它没有附加正文或 user_id。

任何想法我做错了什么?

在此先感谢您的帮助!

4

2 回答 2

1

BinaryMuse(我正在使用的原始代码的创建者)非常棒,可以查看他的旧代码并添加一些内容来覆盖回复。那有多棒?这是他的东西的链接:

带回复的消息系统

PS也感谢帕特里克,我非常感谢你的洞察力!

于 2012-07-17T15:31:12.897 回答
0

这些行使用正确的 conversation_id 创建您的新消息。您的问题源于不涉及表单中传入的参数。

@message = @conversation.messages.build
@message.conversation_id = @conversation
@message.save

理想情况下,您会想做类似的事情

def update
    @user = User.find params[:user_id]
    @conversation = UserConversation.find params[:id]
    @conversation.user = current_user
    if @conversation.update_attributes(params[:conversation])
        redirect_to user_conversation_path(current_user, @conversation)
    else 
        render(:action=>'edit')
    end
end

让 update_attributes 处理更新“消息”。确保您已accepts_nested_attributes_forConversation模型中指定。

有关更多信息,我会看看

于 2012-07-13T16:21:24.840 回答