0

フォーラム システムの上にプライベート メッセージ システム (SO コードを使用) を構築しています。プライベート メッセージの会話に新しいメッセージが追加されると、本文は空白ですが、タイムスタンプとユーザーは正しいです。

システムは次のように機能します。会話は、最初の投稿と受信者で構築されます。これは、SO question 8205284 から逐語的にコピーされたとおりに機能します。

現在、user_conversation コントローラー (会話を構築するコントローラー) の編集/更新アクションを使用して、新しいメッセージを会話に追加しようとしています。

ルート:

resources :users do
    resources :conversations, :controller => "user_conversations"
end

resources :conversations, :controller => "user_conversations" do
    resources :messages
end

コントローラ:

def edit
 @conversation = UserConversation.find(params[:id]) 
 @message = Message.new
end

def update
@conversation = UserConversation.find(params[:id]) 
@message = @conversation.messages.build(params[:message])
@message.user = current_user
@message.conversation_id = @conversation.conversation_id
@message.body = "without this test line the message body is blank!"

if @message.save!
  redirect_to user_conversation_path(current_user, @conversation)
else
  redirect_to @conversation
end
end

会話と埋め込まれた新しいメッセージ フォームを表示するビュー:

<%= form_for(@conversation) do |c| %>
<div class="field">
<%= c.fields_for :messages do |m| %> 
<%= m.text_area :body, placeholder: "New message..." %>
<%= m.submit "New Convo Message", class: "btn btn-large btn-primary" %>
<% end %>
</div>
<%= c.submit "New Convo Message", class: "btn btn-large btn-primary" %>
<% end %>

ログ出力:

Processing by UserConversationsController#update as HTML
Parameters: {"utf8"=>"✓",         "authenticity_token"=>"InYNwRo47ec6meePrKci3z95yTgKC4K7ytO8wFHuFns=", "user_conversation"=>{"messages"=>{"body"=>"testing"}}, "commit"=>"New Convo Message", "user_id"=>"18",   "id"=>"18"}
4

1 に答える 1

1

私はあなたが必要だと思います:

@message = @conversation.messages.build(params[:user_conversation][:messages])

メッセージはパラメーターに基づいて user_conversion にネストされているためです。

メッセージは次のものに対応します。

<%= c.fields_for :messages do |m| %> –
于 2013-02-06T22:38:50.210 に答える