使控制器作为子控制器存在,如何在rails中修复表单路由

时间:2011-02-24 15:19:30

标签: ruby-on-rails

我的ChaptersController没有直接路线(即site/chapters/:id),但仅作为BooksController的子路线存在(即site/books/:id/chapters/:id)。但是,当我尝试去book /:id / chapters / new时,我收到以下路由错误:

Showing .../app/views/chapters/_form.html.erb where line #1 raised:

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您似乎以这种方式使用嵌套路由:

resources :books do
  resources :chapters
end

在这种情况下,您应该拥有命名路线'book_chapter'和'book_chapters'。您可以通过运行rake routes来查看此内容。

在_form.html.erb部分中,您需要更改此行:

<%= form_for(@chapter) do |f|%>

您需要明确指定表单的目标URL,并且可能还处理创建和更新方案的不同URL。尝试这样的事情:

<%= form_for(@chapter, :url => (@chapter.new_record? ? book_chapters_path(@book) : book_chapter_path(@book, @chapter) )) do |f| %>

答案 1 :(得分:0)

我认为/app/views/chapters/_form.html.erb中有错误的路径

检查标记中的url。我想你忘了改变它嵌套在书中。

你也可以在这里粘贴_form.html.erb,所以我会指出来:)