表单提交到不同的控制器 - 路由

时间:2012-05-09 22:42:38

标签: ruby-on-rails ruby-on-rails-3

我认为这是:

<%= 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"}

1 个答案:

答案 0 :(得分: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."

Jamis Buck的

This post建议您不要随意嵌套资源,而只使用一级嵌套:

resources :users do
  resources :tickets
end

resources :tickets do
  resources :messages
end

resources :messages do
  resources :comments
end