2013-02-03 29 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