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文件