2012-07-13 60 views
1

看了一些資源,似乎無法弄清楚這一點。Rails窗體創建空對象 - 嵌套的資源

我的工作由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#放映視圖:

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

任何想法我做錯了什麼?

在此先感謝您的幫助!

回答

1

BinaryMuse(我正在同原代碼的創建者)是真棒足以查看他的舊代碼並添加一些內容來覆蓋回覆。那有多好?這裏是鏈接到他的東西:

Message System with Reply

附:謝謝帕特里克,我絕對讚賞這種見解!

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更新 '的消息。'確保您有Conversation型號中指定的accepts_nested_attributes_for

欲瞭解更多的信息,我想看看