【问题标题】:Rails: update nested resource from the viewRails:从视图更新嵌套资源
【发布时间】:2013-08-12 18:53:03
【问题描述】:

我需要表单来更新从项目视图中属于项目的任务并得到错误

No route matches [PATCH] "/projects/1/tasks/1/edit"

这是可用路线列表

project_tasks_path   GET     /projects/:project_id/tasks(.:format)   tasks#index
                     POST    /projects/:project_id/tasks(.:format)   tasks#create
new_project_task_path    GET     /projects/:project_id/tasks/new(.:format) tasks#new
edit_project_task_path   GET     /projects/:project_id/tasks/:id/edit(.:format)  tasks#edit
project_task_path    GET     /projects/:project_id/tasks/:id(.:format)   tasks#show
                     PATCH   /projects/:project_id/tasks/:id(.:format)   tasks#update
                     PUT     /projects/:project_id/tasks/:id(.:format)   tasks#update
                     DELETE  /projects/:project_id/tasks/:id(.:format)   tasks#destroy
 projects_path   GET     /projects(.:format)     projects#index
                     POST    /projects(.:format)     projects#create
 new_project_path    GET     /projects/new(.:format)     projects#new
 edit_project_path   GET     /projects/:id/edit(.:format)    projects#edit
 project_path    GET     /projects/:id(.:format)     projects#show
                     PATCH   /projects/:id(.:format)     projects#update
                     PUT     /projects/:id(.:format)     projects#update
                     DELETE  /projects/:id(.:format)     projects#destroy
 projects_update_path    POST    /projects/update(.:format)  projects#update
 projects_add_path   POST    /projects/add(.:format)     projects#add
                     POST    /projects/:project_id/tasks/:id/edit(.:format)  tasks#edit
 root_path   GET     /   projects#index

这是查看代码

<% @projects.each do |project| %>

<%= project.name %>
<% project.tasks.each do |task| %>

  <%= task.name %></p>

  <%= form_for [task.project, task], url: edit_project_task_path(task.project, task) do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>
  <%= f.submit "Update task" %>
  <% end %>
<% end %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 forms routes


    【解决方案1】:

    您正在尝试将请求提交到edit 路由。

    请尝试在您的form_for 中使用project_task_path(task.project, task)。 Rails 会知道将 PATCH 请求发送到正确的路由。

    【讨论】:

    • 这是正确的路径,实际上更新方法并没有在控制器中完全实现
    【解决方案2】:

    在表单中,您的 URL 必须是 project_task_path(project_id: task.project, task),因为您想使用 PUT。这里的错误来自 Rails 通过routes.rb 搜索的方式。它正在寻找 PUT edit_project_task_path,但您只有一个 GET。

    【讨论】:

    • @ChristopherEicke, 引发语法错误语法错误,意外 ')',期待 tASSOC
    • 那么你忽略了project_id: 部分,但无论如何,@Dylan 有相同的答案。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多