Domanda

Mi chiedevo perché quando si creano percorsi riposanti in binari con map.resources genera azioni per nuovo, creare, modificare, aggiornare ? C'è qualcosa di sbagliato nel dichiarare una sola azione per crea e aggiorna e fare qualcosa del genere?

def create
  unless post?
     @user = User.new
  else
     redirect_to :action => 'index' if user.create(params[:user])
  end
end

così potremmo avere qualcosa di simile

:GET  users/create # to show the form (same as action - new)
:POST users/create # to create a new user

poiché Restful si basa sui verbi, non sarebbe questo l'approccio migliore da usare?

Grazie per l'attenzione

È stato utile?

Soluzione

Penso che ci siano due problemi correlati ma distinti qui: gli URL esposti e i metodi del controller a cui sono indirizzati. Poiché uno di questi potrebbe essere modificato in modo indipendente, li affronterò separatamente. Inoltre, tieni presente che parlerò un po 'vagamente e rigorosamente di REST come implementato nel contesto di Rails.

In termini di URL esterni, penso che aiuti a distinguere tra gli URL che compongono l'API del sistema (: GET users / 1 , : PUT users / 1 , ecc.) e gli URL che sono lì solo per comodità degli umani utilizzando un browser web ( utenti / nuovo , utenti / 5 / modifica , ecc.). L'API consiste nel recuperare le risorse o interagire con esse in qualche modo: questi sono gli URL che un altro computer utilizzerà per interagire con il tuo sistema. Questi URL sono in genere solo l'indirizzo della risorsa con cui si desidera interagire, quindi si utilizzano il metodo HTTP e i parametri per indicare ciò che si desidera fare (GET = mostrami questa risorsa, PUT = cambia questa risorsa, ecc. ). Gli URL di convenienza sono lì per visualizzare un modulo per rendere più semplice l'utilizzo dell'API da parte di un essere umano. potresti modificare un utente usando curl per digitare manualmente tutti i parametri che volevi cambiare e fare un POST agli utenti / 1, ma come essere umano è molto più semplice se puoi semplicemente usare un modulo .

Per guardare i tuoi esempi sopra, quindi, : OTTIENI utenti / crea potrebbe avere un senso (ed è abbastanza simile a : OTTIENI utenti / nuovo che è l'impostazione predefinita) , ma : gli utenti POST / create si traducono approssimativamente in "quotano un nuovo utente / creano", il che non ha molto senso.

Per quanto riguarda i metodi del controller, " new " e " creare " stanno svolgendo compiti sostanzialmente diversi, come si spera sia chiaro dai paragrafi precedenti. Uno di questi sta visualizzando un modulo e l'altro sta creando una nuova risorsa. potresti sovraccaricare lo stesso metodo per farlo, ovviamente, ma senza una ragione convincente per farlo, creare due piccoli metodi indipendenti per gestire due piccoli compiti indipendenti è probabilmente un approccio più naturale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top