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

1 回答 1

4

看起来您缺少用户、票证和消息:

user_ticket_message_comments_path(@user, @ticket, @message)

您需要这些参数,因为生成的 URL 如下所示:

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

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

此外,考虑到 Rails 应用程序中的经验法则是“资源的嵌套深度不应超过 1 级”。

Jamis Buck 的这篇文章建议不要随意嵌套资源,而是只使用一层嵌套,如下所示:

resources :users do
  resources :tickets
end

resources :tickets do
  resources :messages
end

resources :messages do
  resources :comments
end
于 2012-05-09T23:01:03.617 回答