【问题标题】:Rails delete link nested routesRails 删除链接嵌套路由
【发布时间】:2013-04-26 12:25:03
【问题描述】:

我正在编写一个简单的待办事项应用程序,它有项目并且项目有很多任务。我希望能够删除项目中的任务。但是当我尝试链接到删除方法时,我得到未定义的方法'task_path'。

查看代码

<ul>
  <% @project.tasks.each do |task| %>
    <li><%= task.name %></li> <%= link_to "delete", task, :method  => :delete %></br>
  <% end %>
</ul>

任务控制器

  def destroy
    @project = Project.find(params[:project_id])
    @task = @project.tasks.find(params[:id])
    @task.destroy
    redirect_to @project, :notice => "Task Deleted"
  end

routes.rb

 resources :projects do
    resources :tasks
  end

更新: 所以我有删除工作。但是现在当我遍历每个任务时,有一个额外的删除链接路由到 http://todoapp.dev/projects/9/tasks 并给出 No route matches [DELETE] "/projects/9/tasks" 为什么那里有额外的删除链接?

 <% @project.tasks.each do |task| %>
    <%= task.name %> <%= link_to "delete", [@project, task], :method  => :delete %>
  <% end %>

【问题讨论】:

标签: ruby-on-rails routes


【解决方案1】:

请试试这个:

<%= link_to "delete", [@project, task], :method  => :delete %>

告诉我

【讨论】:

  • 这对我有用。看起来我必须通过 @project 变量来获取任务的路径。谢谢!
  • 我在上面更新的问题中列出了一个额外的删除。不知道为什么会在那里。我做错了什么?
  • &lt;%= debug @project.tasks %&gt; 的输出是什么?
  • --- - !ruby/object:任务属性:id:name:created_at:updated_at:project_id:9 完成:false
【解决方案2】:

运行rake routes 你会看到删除被映射到project_task。

你可以使用

<ul>
  <% @project.tasks.each do |task| %>
    <li><%= task.name %></li> <%= link_to "delete", project_task_path(@project, task), :method  => :delete %></br>
  <% end %>
</ul>

【讨论】:

  • 这是有道理的。但是,当我尝试执行此操作并删除任务时,我得到以下信息。没有路线匹配 {:action=>"show", :controller=>"tasks", :project_id=>#, :id=># }
  • Hmmm.. 这意味着该方法未正确设置为 :delete,因此它执行了正常的获取请求。顺便说一句,在您的评论中,如果任务的 id 为 nil,您将如何删除它???
  • 我不确定。我不确定为什么它会显示为 nil。对此有什么想法吗?
  • 我能想到的唯一一件事就是你的项目中有尚未保存的任务。
  • 当我进入控制台并执行 Task.all 时,我返回 [] 或 Task.count 我得到的计数为 0。
猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多