2015-07-11 62 views
2

我嘗試通過表單爲對話創建新消息。Rails:部分爲新的嵌套資源形式

class Conversation < ActiveRecord::Base 
    has_many :messages 
    accepts_nested_attributes_for :messages 

到目前爲止,我使用的部分來創建新的郵件_new_message.html.erb:

<div id="message_dialog"> 
    <%= simple_form_for [:front, @conversation] do |f| %> 
    <%= f.input :challenge_id, as: :hidden, input_html: { value: @conversation.challenge.id } %> 
    <%= f.simple_fields_for :messages do |m| %> 
     <%= m.input :subject %> 
     <%= m.input :text, as: :text %> 
     <%= m.input :recipient_id, as: :hidden, input_html: { value: @conversation.challenge.user_id } %> 
     <%= m.input :sender_id, as: :hidden, input_html: { value: current_user.id } %> 
    <% end %> 
    <%= f.button :submit %> 
    <% end %> 
</div> 

在ConversationsController的表演動作,我定義:

@conversation = Conversation.find(params[:id]) 
@conversation.messages.build 

這適用於爲新對話創建新消息。

然而,當我試圖創建已經有其它消息的形式幫手屬於談話

什麼是創造最好的方式每封郵件創建一個編輯框一個會話的新郵件一個新的嵌套資源?

優選地,我想使用相同的部分爲新對話創建新消息,併爲現有對話創建新消息,其中已有其他消息

+0

安置自己的'new'控制器代碼,所以我能理解你的建立更好的 –

+0

您可以調用部分中'new.html。 erb'和'edit.html.erb',並且在控制器中可以相應地設置'@ conversation'。 – Pavan

+0

@WesFoster我沒有消息#新控制器,因爲我想將新消息的表單追加到對話底部#show action中。 – Randomtheories

回答

0

幾個小時後,我找到了答案。

simple_fields_for可以有一個或兩個參數。

帶一個參數

<%= f.simple_fields_for :messages do |g| %> 

形式幫助創建會話的所有消息輸入字段。

有兩個參數的

<%= f.simple_fields_for :messages, @conversation.messages.build do |f| %> 

形式助手只爲新的消息,我想創建創建輸入字段。這意味着我們根據此source獨立指定對象名稱和對象本身。

唉,不要忘記一個白名單的嵌套PARAMS:

def conversation_params 
    params.require(:conversation).permit(..., messages_params: [:subject, ...]) 
end 
+0

('@message =')'@ conversation.messages.build' needs在控制器中。 –