`add_route':无效的路由名称,已在使用中

时间:2016-05-15 20:30:08

标签: ruby-on-rails routes

我已指定以下路线:

Rails.application.routes.draw do
  resources :posts, except: [:show]
  get 'posts/*id(/:permalink)', to: 'posts#show', as: :post
end

当我运行应用程序时,我收到此错误:

`add_route': Invalid route name, already in use: 'post'  (ArgumentError)

但是当我将:update:destroy添加到例外列表中以进行调试时,我没有收到任何错误:

resources :posts, except: [:show, :update, :destroy] 

在第一种情况下,为什么:update:destroy的路径在使用不同的http动词时与:show的路径重叠?

1 个答案:

答案 0 :(得分:0)

这里有一些问题。首先,您的错误来源是resources :posts可能正在为post_path创建命名路由。因此,在声明get 'posts/*id(/:permalink)', to: 'posts#show', as: :post的下一行中,as: :post属性正在尝试创建一个名为post_path的路径,该路径已经存在,如错误所示。

其次,为什么要posts#show处理GET和POST请求?我无法想到为什么这会是一件好事。它还可能会出现一些安全问题,具体取决于show操作实际执行的操作。