Ruby on Rails Percorsi di ricerca


Esempio

Rails offre diversi modi per organizzare i tuoi percorsi.

Ambito per URL :

scope 'admin' do
  get 'dashboard', to: 'administration#dashboard'
  resources 'employees'
end

Questo genera i seguenti percorsi

get       '/admin/dashboard',          to: 'administration#dashboard'
post      '/admin/employees',          to: 'employees#create'
get       '/admin/employees/new',      to: 'employees#new'
get       '/admin/employees/:id/edit', to: 'employees#edit'
get       '/admin/employees/:id',      to: 'employees#show'
patch/put '/admin/employees/:id',      to: 'employees#update'
delete    '/admin/employees/:id',      to: 'employees#destroy'

Potrebbe avere più senso, sul lato server, mantenere alcune viste in una sottocartella diversa, per separare le viste di amministrazione dalle viste degli utenti.

Ambito per modulo

scope module: :admin do
  get 'dashboard', to: 'administration#dashboard'
end

module cerca i file del controller sotto la sottocartella del nome specificato

get       '/dashboard',          to: 'admin/administration#dashboard'

È possibile rinominare il prefisso degli helper del percorso aggiungendo un parametro as

scope 'admin', as: :administration do
  get 'dashboard'
end

# => administration_dashboard_path

Rails fornisce un modo conveniente per fare tutto quanto sopra, usando il metodo namespace . Le seguenti dichiarazioni sono equivalenti

namespace :admin do
end

scope 'admin', module: :admin, as: :admin

Ambito dal controller

scope controller: :management do
  get 'dashboard'
  get 'performance'
end

Questo genera queste rotte

get       '/dashboard',          to: 'management#dashboard'
get       '/performance',        to: 'management#performance'

Nidificazione superficiale

Le rotte delle risorse accettano una :shallow opzione :shallow che aiuta ad accorciare gli URL laddove possibile. Le risorse non devono essere nidificate a più di un livello. Un modo per evitare questo è creare percorsi poco profondi. L'obiettivo è quello di lasciare i segmenti URL della raccolta principale dove non sono necessari. Il risultato finale è che le sole rotte nidificate generate sono per :index :create e :new azioni. Il resto è tenuto nel proprio contesto URL poco profondo. Ci sono due opzioni per l'ambito di percorsi superficiali personalizzati:

  • : shallow_path : prefissa i percorsi dei membri con un parametro specificato

    scope shallow_path: "sekret" do
      resources :articles do
        resources :comments, shallow: true
      end
    end
    
  • : shallow_prefix : aggiunge i parametri specificati agli helper specificati

    scope shallow_prefix: "sekret" do
      resources :articles do
        resources :comments, shallow: true
      end
    end
    

Possiamo anche illustrare i percorsi shallow più:

resources :auctions, shallow: true do
  resources :bids do
   resources :comments
  end
end 

in alternativa codificato come segue (se sei felice del blocco):

resources :auctions do
 shallow do
   resources :bids do
     resources :comments
   end
 end
end

I percorsi risultanti sono:

Prefisso Verbo Pattern URI
bid_comments OTTENERE /bids/:bid_id/comments(.:format)
INVIARE /bids/:bid_id/comments(.:format)
new_bid_comment OTTENERE /bids/:bid_id/comments/new(.:format)
edit_comment OTTENERE /comments/:id/edit(.:format)
commento OTTENERE /comments/:id(.:format)
PATCH /comments/:id(.:format)
METTERE /comments/:id(.:format)
ELIMINA /comments/:id(.:format)
auction_bids OTTENERE /auctions/:auction_id/bids(.:format)
INVIARE /auctions/:auction_id/bids(.:format)
new_auction_bid OTTENERE /auctions/:auction_id/bids/new(.:format)
edit_bid OTTENERE /bids/:id/edit(.:format)
offerta OTTENERE /bids/:id(.:format)
PATCH /bids/:id(.:format)
METTERE /bids/:id(.:format)
ELIMINA /bids/:id(.:format)
aste OTTENERE /auctions(.:format)
INVIARE /auctions(.:format)
new_auction OTTENERE /auctions/new(.:format)
edit_auction OTTENERE /auctions/:id/edit(.:format)
vendita all'asta OTTENERE /auctions/:id(.:format)
PATCH /auctions/:id(.:format)
METTERE /auctions/:id(.:format)
ELIMINA /auctions/:id(.:format)

Se analizzi attentamente le rotte generate, noterai che le parti annidate dell'URL sono incluse solo quando sono necessarie per determinare quali dati visualizzare.