1

多くのリソースを調べましたが、これを理解できないようです。

BinaryMuse によるこのコードに基づくメッセージング システムに取り組んでいます。

https://github.com/BinaryMuse/so_association_expirement/compare/53f2263...マスター

応答機能がないので、構築しようとしています。

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 %>

私が持っているもので、正しい conversation_id を持つ新しいメッセージが作成されます。ただし、body または 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_forモデルで指定したことを確認してくださいConversation

詳細については、私が見てみたいと思います

于 2012-07-13T16:21:24.840 に答える