rails路由:id无效

时间:2013-11-21 22:11:52

标签: ruby-on-rails routes ruby-on-rails-4 rails-routing activeresource

我有一个名为Schedule的模型,属于一个项目。一个项目有一个时间表。我试图遵循CRUD惯例,但有一些困难。我有一个列出所有项目的页面,并在每个项目旁边都有一个链接来创建计划。我在路线文件中开始使用以下内容:

resources :schedules

这是问题所在。在“新计划”页面的网址中,需要有一个: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

这使得新计划的网址形式为:

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

我认为这是应该如何完成的,但是,新计划的表格写成

form_for @schedule

并产生以下错误:

undefined method `schedules_path'

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

由于您有一个嵌套的资源/路由,您需要传递一个包含@schedule实例变量(保存新的Schedule对象)的数组以及@project实例变量(保存父项) 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对象(根据定义,它不会有{{1}已分配的属性)。

答案 1 :(得分:0)

如果您使用自定义视图,例如 shedules/get ,则应在 get "shedules/get" <中添加 config/routes.rb 行/ strong>文件

答案 2 :(得分:0)

如果以这种方式嵌套资源,则所有计划方法助手都需要在项目项目之前。例如, project _schedules_path。这就是你得到这个错误的原因。你有一个使用错误的路径助手的链接。

请参阅http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects