Rails“没有路由匹配”错误

时间:2015-12-08 14:52:55

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

我的Rails应用程序中出现以下错误:

没有路线匹配{:action =>“edit”,:controller =>“customers”,:customer_id => 1}

以下是要链接的作业视图行以编辑客户详细信息(客户有许多作业,但没有嵌套资源):

<%= link_to job.customer_id, edit_customer_path(:customer_id => job.customer_id) %>

以下是控制器中的编辑定义:

def edit
  if params[:customer_id]
    @customer = Customer.find(params[:customer_id])   
  elsif params[:id]
    @customer = Customer.find(params[:id])
  end
  respond_to do |format|
    format.html # edit.html.erb
    format.json { render json: @customer }
  end
end

rake路线提供以下内容:

edit_customer GET    /customers/:id/edit(.:format) customers#edit

注:

如果我将视图更改为:

<%= link_to job.customer_id, edit_customer_path(:id => job.customer_id) %>

然后我得到相同的错误,但是“:id = nil”(即没有传递任何值):

No route matches {:action=>"edit", :controller=>"customers", :id=>nil}

我对此有点新意,但有人可以解释一下发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

更新

尝试像这样编写你的路径

edit_customer_path(job.customer) if job.customer

在您的路线中,为客户指定一个参数。

resources :customers, param: :customer_id

所以你总是知道id会是什么样子。 (通过资源完成这项工作需要一些技巧)。

此外,另一个潜在的问题(已经让我失去了几次)是我在同一页面上实例化了我试图路由到的同一个类的空白实例。例如@customer = Customer.new,它正在查找链接,但由于记录尚未保存,因此找不到ID。

我发现命名路由很麻烦,而且更喜欢使用多态url,因为它们会优雅地降级。

在你的情况下,这意味着这样的事情。

link_to 'whev', [:edit, @customer]