2016-03-10 27 views
0

我有一個Idea模型,它有一個Chat,當然,這個聊天有消息。 根據以下路線,我想在聊天頁面中創建一個表單來發布消息。在哪裏以及如何爲rails中的嵌套資源設置表單?

# Chat belongs_to :idea, and Chat has_many :chat_messages 
# I wan't to post messages to /idea/:id/chat/chat_messages 
    resources :ideas do 
     resource :chat, only: :show do 
      resources :chat_messages, only: :create 
     end 
     end 

現在,我的形式是在app/views/chats/show.html.erb,看起來像:

# @chat and @chat_message are defined in Chat controller but I put them here so you can see them 
    @chat = Chat.where(idea_id: params[:idea_id]).first 
    @chat_message = ChatMessage.new(chat: @chat) 

<%= form_for [@chat.idea, @chat, @chat_message] do |f| %> 
    <%= f.text_area :body, size: "60x12" %> 
    <%= f.submit "Message" %> 
<% end %> 

形式生成下面的HTML(我已刪除的投入和一些內容,這是不相關):

<form action="/ideas/1/chat/chat_messages.1" accept-charset="UTF-8" method="post"> 
</form> 

爲什麼會有.1在我的表單動作?(它會導致錯誤)。它應該如何?我需要它來訪問/ideas/1/chat/chat_messages

+1

試試這個'的form_for [:理念,@chat,@chat_message]' –

+0

完美的感謝,它的工作原理! :) 但爲什麼 ?除此之外,路線看起來不錯並且安穩嗎?我是嵌套資源的初學者 –

+0

很高興幫助!路線看起來對我來說還好。它完全取決於要求。但是從rails文檔看,「資源不應該嵌套超過1級」。如果您使用的是最新的Rails版本,我們在嵌套資源上有更好的選擇。我相信你很擅長閱讀文檔:) –

回答

0

試試這個,

form_for [:idea, @chat, @chat_message]