2013-02-03 27 views
0

每个项目都可以有一个单页:路由具有一种关系的嵌套资源?

resources :project do 
    resource :page 
    end 

    class Project < ActiveRecord::Base 
    has_one :page 
    end 

    class Page < ActiveRecord::Base 
    belongs_to :project 
    end 


    def new 
    @project = Project.find(params[:project_id]) 
    @page = @project.build_page 
     respond_to do |format| 
     format.html 
     end 
    end 

    def create 
     @project = Project.find(params[:project_id]) 
     @page = @project.build_page(params[:page_id]) 

     respond_to do |format| 
     if @page.save 
      format.html { redirect_to @page, :notice => 'Page was successfully created.' } 
     else 
      format.html { render action: "new" } 
     end 
     end 
    end 

但是当我去保存网页,我不仅获得了路由错误,但它实际上并没有保存到数据库。

Routing Error 

No route matches [POST] "/projects/2/pages" 

我的表单操作是这样的:

<%= form_for([@job, @page]) do |f| %> 

有没有人有什么事情的任何想法?我从其他SO帖子中将所有这些都拼凑在一起,但是我越来越多地在这里或那里换行,我觉得我正在从一个可行的解决方案中进一步发展。例如,如果我将表单动作更改为:

<%= form_for @page, url: job_page_path(@job) do |f| %> 

一切都神奇地工作,但编辑操作仍然中断。我屠杀的基本概念是什么?

谢谢! --mark

回答

0

你有一个错字:

resource :page 

应该

resources :page 

(注意S)

resource(单数),实际上是建立一个完全不同的方法一组不同的路线。有关更多信息,请参见the docs

UPDATE /勘误

对不起,我读过你的问题得太快。你应该看看Ruby on rails: singular resource and form_for - 看起来form_for不知道如何正确处理奇异资源。

有人在这里SO建议快速解决这个问题:nested form_for singular resource