【发布时间】:2017-01-24 10:24:50
【问题描述】:
我正在构建一个 To Do 应用程序以尝试熟练使用 Rails。我的应用程序中有四个层次结构。
- 用户
- 目标(每位用户有多个目标)
- 任务(每个目标多个任务)
- 子任务(每个任务多个子任务)
我为每个使用嵌套资源的前端表单提供了工作。我的 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)
我的理解是,我没有在任何地方提供此步骤所针对的目标 ID。不知道如何实现这一点。
我注意到的另一件事是,对rake routes 的响应显示了很多 URI 路径,但 POST 方法却没有。它不允许我在url: 中使用form_for 中的路径,因为它与POST 方法不匹配。
所以我的问题是:
- 当您有嵌套资源时,如何路由表单?
- 如何在使用 form_for 时提供父资源的 ID,以便正确路由我的创建操作?
【问题讨论】:
-
这可能会给你一些想法:stackoverflow.com/questions/2034700/…
-
做一个 rake 路由并检查创建任务路由。用户 ID 可能未指示为 :id。
-
不,我有
/goal/:goal_id/task作为创建任务路线。是的,这条路线中没有 :id,我仍然需要在某处提供 :goal_id 并且我不知道该怎么做(正如我在问题中提到的那样)。
标签: ruby-on-rails forms ruby-on-rails-4 model-view-controller url-routing