Rute rel untuk tindakan membuat, menghapus, memperbarui

Saya mencoba memahami perutean rel. Saya telah membaca panduan rel tetapi saya masih bingung. Misalnya, saya memiliki posts_controller dengan semua tindakan mentah Rails seperti di bawah ini:

                    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

Seperti yang saya lihat dari atas, hanya index, new, edit and show tindakan yang memiliki nama jalur di sebelah kiri. Misalnya, tindakan index memiliki nama jalur posts dan saya bisa mendapatkan urlnya sebagai posts_path. Dan saya dapat menggunakannya dalam tag tautan seperti di bawah ini

<a href="/id<%= posts_path %>">here</a>

Namun tidak ada nama jalur untuk tindakan membuat, memperbarui, dan menghancurkan. Jadi bagaimana saya bisa mendapatkan url untuk membuat tindakan dalam hal ini untuk tautan di bawah ini?

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

person Community    schedule 11.04.2016    source sumber


Jawaban (4)


Lewati jalur dan id postingan yang ingin Anda hapus atau objek yang ingin Anda buat:

<%= link_to posts_path(@post) %>

Jika Anda berada di dalam formulir, dan memiliki objek (@post = Post.new) Rails akan mengetahui pengiriman yang ingin Anda buat berdasarkan fakta bahwa Anda menggunakan rute tersebut untuk mengirimkan formulir. Jika Anda ingin menghapus menggunakan link_to, Anda harus meneruskan method: :delete

person toddmetheny    schedule 11.04.2016

Jadi sebenarnya ada _path helper di semua rute yang dihasilkan, saya telah menambahkan nama jalur di depan rute yang dihasilkan di bawah ini, saya akan menjelaskan perbedaannya sebentar lagi:

                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

Jadi setiap permintaan GET yang Anda buat ke server dapat dengan mudah dilakukan dengan jalur yang diberikan (karena GET adalah default untuk setiap tautan yang diakses), namun Anda masih dapat menggunakan bantuan _path untuk mengakses rute lain dengan secara eksplisit menyatakan metode yang Anda gunakan. menggunakan untuk mengakses dengan. Misalnya:

Index:
   <%= link_to "Index", posts_path %>

Create:
   <%= link_to "Create", posts_path, method: 'POST' %>

New:
   <%= link_to "New", new_post_path %>

Edit:
   <%= link_to "Edit", edit_post_path(post_id) %>

Show:
   <%= link_to "Show", post_path(post_id) %>

Update:
   <%= link_to "Update", post_path(post_id), method: 'POST' %>
   <%= link_to "Update", post_path(post_id), method: 'PATCH' %>

Destroy:
   <%= link_to "Destroy", post_path(post_id), method: 'DELETE' %>
person Zubatman    schedule 11.04.2016


Saya merekomendasikan kepada Anda ceramah ini, bagi saya banyak membantu saya untuk memahami hal ini. tetapi pada dasarnya Anda perlu mengirim metode memasang, menambal, atau menghapus Penjelasan rute di rel , menambal dan memasang rel

<%= 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%>

jangan lupa id ini penting karena pengontrol Anda perlu mengetahui postingan apa yang diperlukan untuk melakukan tindakan pembaruan atau penghapusan.

person Ezequiel García    schedule 11.04.2016