2013-06-07 7 views
10

Ho un'applicazione Rails atipico che necessita di una tabella di essere indicizzato da una chiave composta di due valori. Qual è il modo corretto di utilizzare un servizio RESTful per aggiungere una chiave composta di due valori?Rotaie percorsi RESTful con un composito chiave

Se possibile, fare riferimento ai riferimenti.

risposta

4

che ci voleva per me un sacco di prove per trovare una soluzione quasi "elegante":

scope "https://stackoverflow.com/users/:key1/:key2" do 
    resource :users, :path => "" do 
    resources :posts 
    end 
end 

Produce:

users_posts GET /users/:key1/:key2/posts(.:format)    posts#index 
       POST /users/:key1/:key2/posts(.:format)    posts#create 
new_users_post GET /users/:key1/:key2/posts/new(.:format)   posts#new 
edit_users_post GET /users/:key1/:key2/posts/:id/edit(.:format)  posts#edit 
    users_post GET /users/:key1/:key2/posts/:id(.:format)   posts#show 
       PUT /users/:key1/:key2/posts/:id(.:format)   posts#update 
       DELETE /users/:key1/:key2/posts/:id(.:format)   posts#destroy 
      users POST /users/:key1/:key2(.:format)     users#create 
     new_users GET /users/:key1/:key2/new(.:format)    users#new 
    edit_users GET /users/:key1/:key2/edit(.:format)    users#edit 
       GET /users/:key1/:key2(.:format)     users#show 
       PUT /users/:key1/:key2(.:format)     users#update 
       DELETE /users/:key1/:key2(.:format)     users#destroy 
2

è possibile utilizzare la gemma composite primary keys, vedere homepage.

utilizza percorsi RESTful standard e combina il valore di attributi multipli in una :id parametro.

questo sembra essere un buon appraoch, mentre ancora riferimento all'oggetto con la sua Identficatore, che è una combinazione di diversi attributi nel tuo caso.

È inoltre possibile utilizzare questa tecnica senza la gemma combinando gli attributi in to_param e dividere nuovamente per la ricerca. Mantiene i percorsi RESTful standard.

+0

anche una risposta breve è un IMHO risposta, se risponde alla domanda specifica (una modalità RESTful con riferimento). Ma ho aggiunto una spiegazione. –

0

Beh, è ​​difficile da dire, ma l'uso di un percorso come questo dovrebbe essere abbastanza giusto e buono.

http://domain/object/:value1/:value2 

Se entrambe le chiavi possono essere visualizzate dall'utente, è di gran lunga il modo più semplice per farlo. Se entrambi i valori sono necessari per ottenere l'oggetto, allora è un buon modo per farlo. Se è necessario un solo valore, si potrebbe avere l'id principale, come

http://domain/object/:id?value2=... 

O qualcosa di simile

http://domain/object/:value1/:value2 

Dove value2 è un parametro opzionale.

Detto questo, tutto il resto dovrebbe funzionare come ha funzionato con tutto il resto. L'unica differenza è che i percorsi avranno più di un semplice id.

più

Inoltre, devo dire che le persone spesso fraintendono riposo. Rails sta utilizzando pesantemente la richiesta CRUD e tutto può essere abbastanza riposante. L'idea è di avere un URL che rappresenti ciò a cui stai tentando di accedere.

Check this out:

https://en.wikipedia.org/wiki/Representational_state_transfer

Non temere utilizzando parametri GET se sono necessari. L'idea principale è quella di avere un URL che punta a una risorsa e altri parametri potrebbero essere usati per ottenere cose particolari.

Penso che alla fine la vera soluzione per mettere in discussione qui è il senso comune!

+0

Ti sto dando la taglia perché ho trovato la tua risposta utile e volevo premiarla, tuttavia non l'ho accettata perché non è ancora "la risposta" per questa domanda. Grazie! – fotanus