【问题标题】:`add_route': Invalid route name, already in use`add_route': 无效的路由名称,已在使用中
【发布时间】:2016-05-15 20:30:07
【问题描述】:

我已经指定了以下路线:

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的路径与:show的路径重叠,而它们使用不同的http动词?

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

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

    其次,为什么要posts#show 处理 GET 和 POST 请求?我想不出为什么这会是一件好事的理由。根据show 操作的实际操作,它也可能会出现一些安全问题。

    【讨论】:

    • resources :posts 如何在我添加, except: [:show] 时创建post_path?我不希望posts#show 同时处理 GET 和 POST 请求。我只是说为什么当我将:update:destroy 添加到异常列表时我没有收到任何错误。
    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多