我已指定以下路线:
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
的路径重叠?
答案 0 :(得分:0)
这里有一些问题。首先,您的错误来源是resources :posts
可能正在为post_path
创建命名路由。因此,在声明get 'posts/*id(/:permalink)', to: 'posts#show', as: :post
的下一行中,as: :post
属性正在尝试创建一个名为post_path
的路径,该路径已经存在,如错误所示。
其次,为什么要posts#show
处理GET和POST请求?我无法想到为什么这会是一件好事。它还可能会出现一些安全问题,具体取决于show
操作实际执行的操作。