我正在构建一个ToDo应用程序,试图获得流利的Rails。我的应用中有四个级别的层次结构。使用form_for与嵌套资源
- 用户
- 目标(每个用户的多个目标)
- 任务(每个目标多任务)
- 子任务(每个任务的多个子任务)
我有一个工作的前端形式对于每个使用嵌套资源的应用程序。我的routes.rb有这样的事情
resources :goal do
resources :task do
resources :subtask
end
end
我想现在要做的是,有所有这些形式的用户控制器的一个观点正确。
这是我试图创建表格:
<%= form_for @task, url: {controller: 'task', action: 'create'} do |f| %>
<%= f.label :description %>
<%= f.text_field :description %>
<%= f.submit "Add Goal", class: "btn" %>
<% end %>
但我最终得到这个错误
No route matches {:action=>"create", :controller=>"task", :id=>"1"}
的:ID => 1对应于用户页面我在( http://localhost:3000/user/1)
我的理解是,我没有提供此步骤的目标goal_id。不知道如何实现这一点。
我注意到的另一件事是,对rake routes
的响应显示了很多URI路径,但对POST方法没有任何影响。它不允许我使用url:
的form_for
中的路径,因为它与POST方法不匹配。
所以我的问题是:
- 如何路由的form_for,当你有嵌套的资源?
- 如何在使用form_for时提供父资源的ID,以便我的创建操作正确路由?
大概这将给你一些想法:HTTP://计算器.com/questions/2034700/form-for-with-nested-resources – dp7
执行rake路由并检查创建任务路由。用户ID可能不会被指示为:id。 – Syl
不,我有'/ goal /:goal_id/task'作为创建任务路线。是的,在这条路线上没有:id,我仍然需要在某处提供:goal_id,我不知道如何去做(正如我在问题中提到的那样)。 –