rails路由:id无效
我有一个名为Schedule的模型属于一个项目。 一个项目有一个时间表。 我试图遵循CRUD惯例,但有一些困难。 我有一个列出所有项目的页面,并在每个项目旁边都有一个链接来创建计划。 我在路径文件中开始使用以下内容:
resources :schedules
这是问题所在。 在“新计划”页面的url中,需要有一个:id,指的是计划所属的项目,当创建计划时,它将属于正确的项目。 我不知道如何用资源做到这一点,所以我将路由代码更改为:
match 'schedules/new/:id', to: 'schedules#new', as: :new_schedule, via: [:get, :post] resources :schedules, except: [:new, :create]
出于某种原因,此页面为空白。 它只是白色的。 如何修复路线? 谢谢。
更新:
我也尝试将我的路线更改为以下内容:
resources :projects do resources :schedules end
这使得新计划的URLforms为:
/projects/:project_id/schedules/new(.:format)
我认为这是应该如何完成的,但是,新计划的表格是写成的
form_for @schedule
并产生以下错误:
undefined method `schedules_path'
有任何想法吗?
由于您有一个嵌套的资源/路由,您需要将包含@schedule
实例变量(保存新的Schedule
对象)和@project实例变量(保存父Project
对象)的数组传递给form_for
:
form_for [@project, @schedule]
解释 :
您的命名匹配路由(即match 'schedules/new/:id'
)无法路由,因为schedules#new
#new控制器操作是RESTful,因此不接受id
参数 。 但是,您在更新中正确修改了路径 – 项目/计划之间的父子关联应该通过嵌套资源确实在路线中表示。
生成的路径 – /projects/:project_id/schedules/new
– 要求将一个对象数组传递给form_for
帮助器。 第一个必须是现有的Project
对象(因此满足:project_id
参数),第二个必须是新的Schedule
对象(根据定义,它还没有分配id
属性)。
如果您使用自定义视图,例如shedules/get
,则应在config/routes.rb
文件中添加行get "shedules/get"
如果以这种方式嵌套资源,则所有调度方法助手都需要在项目或项目之前。 例如, 项目 _schedules_path。 这就是你得到这个错误的原因。 你有一个使用错误的路径助手的链接。
请参阅http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects