2011-09-11 162 views
1

看到一个使用form_for与嵌套资源的问题,我已经重新映射路由更明智。form_for嵌套资源路由问题

我的routes.rb:

resources :books do 
    resources :sections, :controller => 'content_sections' 
    member do 
    post 'publish' 
    end 
end 

而且我_form.html.haml

= form_for [@book, @content_section] do |f| 
    -if @content_section.errors.any? 
    #error_explanation 
     %h2= "#{pluralize(@content_section.errors.count, "error")} prohibited this section from being saved:" 
     %ul 
     - @content_section.errors.full_messages.each do |msg| 
      %li= msg 

    .field 
    = f.label :name 
    = f.text_field :name 

这是造成此错误:

undefined method `book_content_sections_path' for #<#<Class:0x00000103a58238>:0x00000103a4a0e8> 

什么我期待的book_sections_path但它没有考虑到routes.rb中的设置。

+0

请加耙路输出 –

回答

3

既然有模型和控制器之间没有真正的关系,那么你将需要不使用标准约定时指定的网址:

form_for [@book, @content_section], :url => book_sections_path(@book, @content_section) 
+1

谢谢,对不起,我有点新我发现文档过于集中于这些约定,这些约定在你进入真实世界的5分钟内是很棒的。奇怪的是我发誓我有这个工作,然后当我将BookSection重命名为ContentSection(模型,控制器相关的视图被重命名)时,它停止了。你会认为它可以适应路线设置。 –

+2

实际上,与此有关的许多问题是有两个路径,具体取决于您是否正在创建或编辑: –