2017-10-17 1 views
0

In meiner Routen-Datei Ich habe angegeben:Verstehen ‚GET‘ Routen in Schienen

resources :cards do 
end 

Außer den grundlegenden CRUD Routen habe ich eine andere Route, die wie folgt lautet:

get '/cards/get_schema' => 'cards#get_schema' 

Als ich getroffen diesen Endpunkt werde ich eigentlich zu cards#show genommen. Warum passiert das?

Antwort

1

Eine von resources :cards erzeugte Route ist get '/cards/:id'. Kannst du das Problem sehen? get_schema wird als ID erkannt. Versuchen Sie dieses

resources :cards do 
    get 'get_schema', on: :collection 
end 

Oder setzen Sie einfach diesen Weg auf

get '/cards/get_schema' => 'cards#get_schema' 
resources :cards 
1

Es definiert in der Größenordnung von Routen ab.

Bestellen 1

Rails.application.routes.draw do 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
    resources :cards do 
    end 

    get '/cards/get_schema' => 'cards#get_schema' 
end 

Laufstrecken

rake routes 

Ausgabe

~/D/p/p/s/console_test> rake routes 
      Prefix Verb URI Pattern     Controller#Action 
      cards GET /cards(.:format)   cards#index 
       POST /cards(.:format)   cards#create 
     new_card GET /cards/new(.:format)  cards#new 
     edit_card GET /cards/:id/edit(.:format) cards#edit 
      card GET /cards/:id(.:format)  cards#show #<======== 
       PATCH /cards/:id(.:format)  cards#update 
       PUT /cards/:id(.:format)  cards#update 
       DELETE /cards/:id(.:format)  cards#destroy 
cards_get_schema GET /cards/get_schema(.:format) cards#get_schema #<======== 

Seit Show 0 erwartetund ist über /cards/get_schema wird es

Bestellen 2

Rails.application.routes.draw do 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
    get '/cards/get_schema' => 'cards#get_schema' 

    resources :cards do 
    end 

end 

Laufstrecken

rake routes 

Ausgabe

~/D/p/p/s/console_test> rake routes 
      Prefix Verb URI Pattern     Controller#Action 
cards_get_schema GET /cards/get_schema(.:format) cards#get_schema #<======== 
      cards GET /cards(.:format)   cards#index 
       POST /cards(.:format)   cards#create 
     new_card GET /cards/new(.:format)  cards#new 
     edit_card GET /cards/:id/edit(.:format) cards#edit 
      card GET /cards/:id(.:format)  cards#show #<======== 
       PATCH /cards/:id(.:format)  cards#update 
       PUT /cards/:id(.:format)  cards#update 
       DELETE /cards/:id(.:format)  cards#destroy 
zu cards#show geroutet

In diesem Szenario /cards/get_schema wird Top-Level und wird mit nicht cards#show

1

Rails Konflikt get_schema als id einer Karte zu behandeln. Die Lösung ist die Routen Erklärungen neu zu ordnen, etwa so:

get '/cards/get_schema' => 'cards#get_schema' 

resources :cards do 
end 

Auf diese Weise der get_schema Route wird vor der show Strecke angepasst werden.