为什么在使用资源时Rails routes.rb中的订单很重要?

时间:2015-08-21 16:47:23

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

我的路线如此列出时收到错误:

resources :coupons
get 'coupons/redeem_coupon', to: 'coupons#redeem_coupon', as: 'redeem_coupon'

错误是:

ActiveRecord::RecordNotFound - Couldn't find Coupon with 'id'=redeem_coupon:

当我将订单撤销到:

get 'coupons/redeem_coupon', to: 'coupons#redeem_coupon', as: 'redeem_coupon'
resources :coupons

工作正常。我知道资源会创建这些路线

GET /coupons
GET /coupons/new    
POST    /coupons    
GET /coupons/:id    
GET /coupons/:id/edit   
PATCH/PUT   /coupons/:id        
DELETE  /coupons/:id    

首先列出我的自定义路线,更具体或覆盖其他路线?为什么订单很重要?

2 个答案:

答案 0 :(得分:4)

您获得的错误是因为rails尝试从上到下开始匹配路由。如果您尝试将自定义路由添加到现有资源,则更简单的方法是执行此操作。 collection如果您想在群组中使用member,则resources :coupons do collection do get 'redeem_coupon' end end 是您要将自定义路由添加到单个资源。

{{1}}

答案 1 :(得分:2)

首先列出您的自定义路线,您将覆盖其他路线。当rails收到请求时,它只是从routes.rb文件的顶部开始,并与首先匹配的路径一起使用。