2012-05-09 44 views
1

我有这个在我看来:表单提交到不同的控制器 - 路由

<%= form_for @comment, :as => :post, :url => user_ticket_message_comments_path, :html => { :class => "add-comment", :id => "add-comment-" + @ticket.id.to_s } do |f| %> 
    <%= f.label :body, "Add comment" %> 
    <%= f.text_area :body %> 
    <%= f.submit "Add comment" %> 
<% end %> 

在我的routes.rb:

resources :users do 
    resources :tickets do 
    resources :messages do 
     resources :comments 
    end 
    end 
end 

我得到一个路由错误:

No route matches {:controller=>"comments"}

回答

4

它看起来像你缺少用户,票证和消息:

user_ticket_message_comments_path(@user, @ticket, @message) 

你需要这些参数,因为URL生成这个样子的:

/users/:user_id/tickets/:ticket_id/messages/:message_id/comments 

没有参数,Rails不知道如何生成URL。

此外,考虑到拇指的Rails应用的规则是:"Resources should never be nested more than 1 level deep."

This post通过了Jamis巴克建议,而不是任意嵌套的资源,你只使用嵌套像这样的一个级别:

resources :users do 
    resources :tickets 
end 

resources :tickets do 
    resources :messages 
end 

resources :messages do 
    resources :comments 
end 
+0

伟大的规则提醒! – TheIrishGuy

+0

我该如何反映这种路由?我觉得它很直观(用户有门票有消息和评论) –

+0

@rabid_zombie看到更改的答案 – psyho