2010-02-28 5 views

Antwort

69

Ich hatte die gleiche Frage und ich schrieb a small post about this in my blog

Der Grund hier zusammengefasst (Ich fand diese in einem Forum):

* _path für Ansichten sind, weil ahrefs implizit verknüpft sind die aktuelle URL Es wäre also eine Verschwendung von Bytes, es immer und immer wieder zu wiederholen. Im Controller wird jedoch * _url für redirect_to benötigt, da die HTTP-Spezifikation vorschreibt, dass der Location: -Header in 3xx-Weiterleitungen eine vollständige URL ist.

Here is another explanation, die sagt, es hängt davon ab, ob wir brauchen eine absolute URI verwenden, wenn auf eine SSL-Site von einer nicht-SSL-Site verknüpft und umgekehrt.

Was ich bisher gelesen habe, deutet nicht darauf hin, dass einer von ihnen sicherer ist als der andere. Es kommt wirklich darauf an, was die "richtige" Verwendung ist.

+1

Vielen Dank. Fand es nützlich. Also in den Controllern verwenden wir "_url", während wir in den Ansichten "_path" verwenden können, obwohl "_url" auch dort noch verwendet werden kann. – MohamedSanaulla

+10

Sie müssen * _url nicht für Controller verwenden, der Pfad funktioniert genauso gut. Sie sollten '_url' nur verwenden, wenn Sie die Route zu externen Quellen anzeigen. –

+3

Um noch etwas zu verdeutlichen: Die '_path'-Ausgabe funktioniert genauso gut für den' Location'-Header in einer Redirect. Der Browser wird dies als eine Umleitung von relativ zu Root interpretieren. –

67

path ist relativ, während url ist absolut.

+2

Eher prägnant. Ich mag prägnant. ;) +1 – sholsinger

+2

Perfekt. Die Verwendung von _url ist im Controller erforderlich (serverseitig) und _path sind engouh in der Ansicht (Browser-Ende). – Arun

+0

Kurze, knappe Antwort +1 – mjwatts

1

Wenn Sie sicher sind, dass Sie nicht alle übergebenen Daten offen legen, ist _path besser, da es eine relative URL generiert, etwa "/ login", aber _path würde "http://localhost:3000/login" geben. Bitte beziehen Sie sich auf diesen Blogbeitrag, den ich irgendwann wieder in Bezug auf dasselbe gefunden habe. When _url is better than _path

+3

Ich fürchte, das ist falsch. Die Verwendung von _path aus Sicherheitsgründen bietet keine Sicherheit. Dies würde bedeuten, dass die IP-Adresse eines Webservers geheim gehalten werden sollte, wenn eine einfache DNS-Anfrage diese Information preisgibt. – jefflunt

+1

Gleichermaßen, mit dem oben genannten Beispiel zum Ausblenden des Hosts und des Ports "localhost: 3000" für die Sicherheit, ist falsch. Entdecken Sie diese Informationen ist einfach mit einem Software-Netzwerk-Scan-Tool, weit verbreitet. – jefflunt

33

Ein Beispiel für die Differenz für eine Ressource "user" genannt:

users_url # => http://localhost:3000/users 
users_path # => /users 
1

_url wird den gesamten Pfad geben. Da es den Domain-Namen und das Protokoll enthält, können Sie es z. um E-Mails zu versenden oder auf eine andere Domain umzuleiten, usw.

_Pfad gibt den Pfad zurück, der nach '/' ohne Domain, Protokoll usw. ist. Also kann man es hin und wieder benutzen (schätze ich), wo du nicht ' t benötigen Angaben zur Domain.

0

Der _url helper erzeugt eine Zeichenkette, die die gesamte URL enthält, während der _path helper einen String mit dem relativen Pfad von der Wurzel der Anwendung erzeugt, z.B .:

photos_url # => "http://www.example.com/photos" 
photos_path # => "/photos" 

Wie pro Rails Guides - Routing.

Verwandte Themen