0%

Ruby on Rails 網站開發 練習 - 012 ( 資料””刪除(delete) )

練習 - 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.erbdelete超連結多增加一個防呆機制data: {confirm: "確定要刪除嗎?"}

接著打開瀏覽器,來看看畫面。

這樣的設計,就是怕使用者不小心按到刪除,還會再做第2次的確認,這時候按下確定那就真的刪除那筆資料了。


下一堂課程,就是要進入投票的部分。

參考來源:為你自己學 Ruby on Rails (https://railsbook.tw/)