2016-04-11 19 views
4

Ich versuche, Schienen Routing zu verstehen. Ich habe Schienenführer gelesen, aber ich bin immer noch in Verwirrung. Zum Beispiel habe ich eine posts_controller mit allen Schienen crud Aktionen wie folgt:Rails Route für erstellen, löschen, aktualisieren Aktion

    posts GET /posts(.:format)      posts#index 
          POST /posts(.:format)      posts#create 
       new_post GET /posts/new(.:format)     posts#new 
       edit_post GET /posts/:id/edit(.:format)   posts#edit 
        post GET /posts/:id(.:format)     posts#show 
          PATCH /posts/:id(.:format)     posts#update 
          PUT /posts/:id(.:format)     posts#update 
          DELETE /posts/:id(.:format)     posts#destroy 

Wie ich von oben nur index, new, edit and show Aktionen haben einen Pfadnamen auf der linken Seite sehen. Zum Beispiel hat index Aktion einen Pfadnamen posts und ich kann die URL als posts_path erhalten. Und ich kann es in Link-Tag wie folgt verwenden

Aber es gibt keine Pfadnamen für Erstellen, Aktualisieren und Zerstören von Aktionen. Wie kann ich in diesem Fall die URL für die Erstellung der Aktion für den folgenden Link abrufen?

<a href="<%= ..... link to create action of post controller %>">here</a>  

Antwort

4

Übergeben Sie den Pfad und entweder eine ID der Post, Sie würden löschen oder das Objekt möchten gerne erstellen:

<%= link_to posts_path(@post) %> 

Wenn Sie in einer Form sind, und haben ein Objekt (@post = Post.new) Rails wissen bei der Übermittlung, dass Sie erstellen möchten, basierend auf der Tatsache, dass Sie diese Route verwenden, um ein Formular zu senden. Wenn Sie mit einem link_to löschen möchten, müssen Sie method: :delete

2

übergeben. Sie müssen das method-Attribut in der verwenden. Die Route Name ist der gleiche, aber nur mit anderen HTTP-Verben:

<%= link_to "Update Post", post_path, method: :patch %> 
2

So gibt es tatsächlich _path Helfer auf alle erzeugten Routen habe ich die Pfadnamen vor den erzeugten Routen unten hinzugefügt, I‘ ll den Unterschied in nur einen Moment erklären:

   posts GET /posts(.:format)      posts#index 
       posts POST /posts(.:format)      posts#create 
      new_post GET /posts/new(.:format)     posts#new 
      edit_post GET /posts/:id/edit(.:format)   posts#edit 
       post GET /posts/:id(.:format)     posts#show 
       post PATCH /posts/:id(.:format)     posts#update 
       post PUT /posts/:id(.:format)     posts#update 
       post DELETE /posts/:id(.:format)     posts#destroy 

So eine GET-Anforderung zum Server machen kann einfach mit dem angegebenen Pfad durchgeführt werden (da GET die Standardeinstellung für jeden Zugriff auf Link), aber man kann immer noch verwenden der _path-Helfer, um auf die anderen Routen zuzugreifen, indem explizit die Methode angegeben wird, mit der Sie zugreifen möchten. Zum Beispiel:

1

Ich empfehle Ihnen diese Vorträge, für mich hilft mir sehr, dies zu verstehen. aber im Grunde müssen Sie die Methode put, Patch senden oder löschen Routes in rails explain, patch and put for rails

<%= link_to "Update Post", posts_path(@post.id), method: :patch %> 
<%= link_to "Update Post", posts_path(@post.id), method: :put %> 
<%= link_to "delete Post", posts_path(@post.id), method: :delete%> 

nicht vergessen, die id seine wichtig, weil der Controller wissen müssen, was Geben Sie brauchen das Update zu machen oder die Aktion löschen.

Verwandte Themen