1

我有一個名爲Schedule的模型,屬於一個項目。一個項目有一個計劃。我試圖遵循CRUD約定,但有一些困難。我有一個列出所有項目的頁面,並在每個項目旁邊有一個鏈接來創建一個時間表。我開始在我的路由文件中使用以下內容:軌道路線與:id不工作

​​

這是問題所在。在「新時間表」頁面的網址中,需要有一個:表示該時間表所屬的項目的id,這樣,創建時間表時,它將屬於正確的項目。我不知道的方式來做到這一點與資源,所以我改變了我的路線代碼:

match 'schedules/new/:id', to: 'schedules#new', as: :new_schedule, via: [:get, :post] 
resources :schedules, except: [:new, :create] 

出於某種原因,這個頁面是空白的。它只是白色的。我如何修復我的路線?謝謝。

UPDATE:

我也試圖改變我的路線如下:

resources :projects do 
    resources :schedules 
end 

這使得網址新日程表的形式:

/projects/:project_id/schedules/new(.:format) 

我覺得這是應該如何完成的,但是,新時間表的形式寫爲

form_for @schedule 

,併產生以下錯誤:

undefined method `schedules_path' 

任何想法?

回答

2

由於你有一個嵌套的資源/路由時,需要通過同時含有與@project實例變量沿@schedule實例變量(保持新Schedule對象)的陣列(保持母體Project對象)到您的form_for

form_for [@project, @schedule] 

說明

您的指定匹配路由(即match 'schedules/new/:id')無法路由,因爲schedules#new控制器操作是RESTful,因此does not accept an id parameter。但是,您在更新中正確修改了路線 - 通過嵌套資源,項目/時間表之間的父子關聯的確應該在您的路線中呈現。

生成的路徑 - /projects/:project_id/schedules/new - 要求將一個對象數組傳遞給您的幫助器form_for。第一個必須是現有的Project對象(因此滿足:project_id參數),第二個對象必須是新的Schedule對象(根據定義,該對象尚未分配id屬性)。

+0

謝謝。這幾乎解決了它。但由於某些原因,它不會保存。當我提交表單時,它給了我下面的錯誤:'不能寫未知屬性'schedule_id''。 – Philip7899

+0

這是什麼錯誤?請更新您的問題以包含您的控制器代碼/堆棧跟蹤。 – zeantsoi

+0

一些我在堆棧溢出時收到的最快最好的建議。萬分感謝! – Philip7899

0

如果您正在使用自定義視圖,例如shedules/get,你應該在config/routes.rb文件