【问题标题】:No route matches {:action=>"destroy", :controller=>"links"}没有路线匹配 {:action=>"destroy", :controller=>"links"}
【发布时间】:2013-03-12 14:47:38
【问题描述】:

路线

   resources :links, only: [:new, :create, :index, :destroy]

links_controller

class LinksController < ApplicationController
before_filter :signed_in_user

def new
@user = current_user
@tags = @user.tags
@link = Link.new
end

def create
@link = Link.new(params[:link])
if @link.save
  flash[:success] = "Link created!"
  redirect_to root_url
else
  render 'new'
end
end

def index
@links = Link.paginate(page: params[:page])
end

def destroy
@link.destroy
redirect_to links_path
end

end

html.erb

<li>
<span class="location_info"> From Tag: <%= link.from_tag.ref %></span>
<span class="location_info"> To Tag: <%= link.to_tag.ref %></span>
<span class="location_info"> Cost: <%= link.value %>
| <%= link_to "delete", link, method: :delete,
                                 data: { confirm: "You sure?" } %></span>
</li>

为什么会出现这个错误?

【问题讨论】:

  • 销毁操作需要id,因此它可以搜索记录(在您的情况下,它需要一个 id 来搜索@link)
  • 您应该查看出现此错误的代码。它很可能在您尝试添加删除链接的视图中。
  • link 很可能是一条新记录(它没有 id),这就是您收到错误的原因。
  • 删除链接是索引页面的一部分,所以它肯定有一个id!
  • 在你的部分中做一个&lt;%= link.inspect -%&gt;,这样我们就可以看到链接的实际样子。和一个rake routes | grep -i link 只是为了确定......

标签: ruby-on-rails ruby-on-rails-3.2 routes


【解决方案1】:

您在 github 上的代码与您在此处的代码不同,但是, 您不需要先在destroy 操作中找到链接然后将其销毁吗? 现在它在一个空的@link 变量上调用destroy

由于链接和路由看起来不错,我猜你应该有这样的销毁操作:

def destroy
  @link= Link.find(params[:id])
  @link.destroy
  redirect_to links_path
end

除非您在应用程序中的某个位置找到了@link 对象的过滤器。在 github 上更新您的代码,以便我可以下载它并将其安装在我的计算机上,以便在上述解决方案不起作用时进行更多调查。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2012-07-22
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多