Frage

Ich habe mich gefragt, warum, wenn Sie ruhige Routen in Schienen mit map.resources erstellen erzeugt sie Aktionen für neu, erstellen, bearbeiten, aktualisieren ? Gibt es etwas falsch in deklarieren nur eine Aktion für Erstellen und Update und so etwas tun?

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

, so dass wir so etwas wie

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

da Restful basierend auf Verben, wäre dies nicht der beste Ansatz zu benutzen?

Vielen Dank für Ihre Aufmerksamkeit

War es hilfreich?

Lösung

Ich denke, es gibt zwei verwandte, aber unterschiedliche Probleme hier: die URLs ausgesetzt und die Controller-Methoden sie weitergeleitet werden. Da eine dieser unabhängig voneinander geändert werden könnte, werde ich sie getrennt behandeln. Bitte beachten Sie, dass ich ein wenig locker, und streng über REST sprechen werde, wie im Zusammenhang mit Rails umgesetzt werden.

Im Hinblick auf die externen URLs, ich denke, es zwischen den URLs zu unterscheiden hilft, die die API des Systems bilden (:GET users/1, :PUT users/1, usw.) und die URLs, die nur dort als Service für Menschen mit einem Web-Browser (users/new, users/5/edit, etc). Die API ist über die Ressourcen zu holen oder mit ihnen in irgendeiner Weise interagieren - das sind die URLs, die einen anderen Computer verwenden wird, wenn sie mit dem System interagieren. Diese URLs sind in der Regel nur die Adresse der Ressource, mit denen Sie interagieren möchten, und dann verwenden Sie die HTTP-Methode und die Parameter, um anzuzeigen, was es ist, was Sie tun wollen (GET = Zeigen Sie mir, diese Ressource, PUT = diese Ressource ändern, usw. ). Die Bequemlichkeit URLs gibt es ein Formular anzuzeigen, um es einfacher für einen Menschen die API zu verwenden. Sie könnte einen Benutzer bearbeiten, indem Sie curl mit manuell alle Parameter tippen Sie, es ist viel einfacher, wenn Sie nur ein Formular verwenden, um eine POST an Benutzer / 1, aber als Mensch ändern und machen wollte .

Um oben auf Ihren Beispielen zu betrachten, dann :GET users/create könnte Sinn machen (und ist ziemlich ähnlich wie :GET users/new das ist die Standardeinstellung), aber :POST users/create würde grob übersetzen zu „einen neuen Benutzer machen / erstellen“, was nicht Sinn ergeben recht.

Bei den Controller-Methoden gehen, „neu“ und „schaffen“ ausführen grundsätzlich andere Aufgaben, wie hoffentlich aus den vorstehenden Absätzen sollten klar sein. Einer von ihnen ist die Anzeige einer Form, und das andere ist eine neue Ressource zu erstellen. Sie könnte die gleiche Methode überlasten, dies zu tun, natürlich, aber ohne zwingenden Grund, dies zu tun, zwei kleine unabhängige Methoden der Schaffung von zwei kleine unabhängigen Aufgaben zu bewältigen ist wahrscheinlich ein natürlicher Ansatz.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top