2015-08-21 2 views
4

я получаю сообщение об ошибке, когда мой маршрут указан как таковой:Почему значение порядка в Rails routes.rb при использовании ресурсов?

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  

Является ли перечисление моего маршрута первым, более конкретным или переопределением другого маршрута? Почему порядок имеет значение?

ответ

3

Ошибка, которую вы получаете, заключается в том, что рельсы пытаются сопоставить маршруты, начинающиеся с верхней части вниз. Если вы пытаетесь добавить настраиваемый маршрут к существующему ресурсу, проще всего это сделать. collection - это если вы хотите использовать его в группе, member - это если вы хотите добавить настраиваемый маршрут к отдельному ресурсу.

resources :coupons do 
    collection do 
    get 'redeem_coupon' 
    end 
end 
+0

Благодарим за добавление дополнительного предложения для использования коллекции и участника! – MicFin

2

Перечисляя свой маршрут в первую очередь, вы переопределяете другой маршрут. Когда рельсы получат запрос, он просто начинается с верхней части вашего файла routes.rb и идет в зависимости от того, какой маршрут совпадает с первым.

Смежные вопросы