練習 - 012 ( 資料””刪除(delete) )
CRUD前面已經介紹了新增、修改、編輯,現在剩下刪除的功能
首先,在 view/index.html.erb
再多增加一個”刪除”超連結。一樣我們使用link_to
方法。
可是我們不知道delete
的路徑要怎麼走,所以一樣需要請門口阿姨(Routes)來告訴我們。可以發現DELETE
前面的prefix
沒寫東西,只要是沒寫就表示同上。
所以我們可以確定路徑是/candidate/candidates/:id(.:format)
。
所以路徑該會是<%= link_to 'delete', candidate_path(candidate.id) %>
。
可是如果這樣寫的話,基本上你會看到跟show
的頁面是一模一樣。因此我們要在路徑後面給它加上一個動詞:<%= link_to 'delete', candidate_path(candidate.id), method: 'delete' %>
打開瀏覽器,就會看到畫面上的表單中呈現
同時我們檢視頁面原始碼,可以發現在每個超連結中,都多出了一個data-method="delete"
的屬性。這個是Rails做的是手腳。
所以我們應該也可以猜到,按下去delete
,因該是會出現提示訊息的頁面,告訴我們說找不到destroy action
。
而我們也是維持跟之前一樣的作法,如果找不到,那就做一個給你。
接著我們就要到CandidatesController
新增destroy action
。
如果今天我們要刪除一筆資料,那首先要做的就是先把那筆資料找出來。在前面的新增、編輯、更新,我們早就找過好幾次的資料了,所以直接把同樣的code給複製過來。
找到資料,那我們就可以直接把資料給刪除了,@candidate.destroy
另外我們一樣給它一個提示訊息flash[notice] = "候選人已刪除!!!"
,並且將頁面跳轉回候選人列表頁面。
打開瀏覽器,隨便點選一個候選人的刪除超連結
如果我們回到候選人表單頁面,真的點擊 delete 是會直接將整筆資料刪除,救不回來。
所以我們可以在 index.html.erb
中delete
超連結多增加一個防呆機制data: {confirm: "確定要刪除嗎?"}
接著打開瀏覽器,來看看畫面。
這樣的設計,就是怕使用者不小心按到刪除,還會再做第2次的確認,這時候按下確定
那就真的刪除那筆資料了。
下一堂課程,就是要進入投票的部分。
參考來源:為你自己學 Ruby on Rails (https://railsbook.tw/)