iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

CRUD 剩下刪除了

刪除要做的事情就更簡單了
列出要做的事情吧

  1. 在選單加上刪除按鈕
  2. 按下去後呼叫 Posts controller 的 delete
  3. 撈出要刪除的 post
  4. 刪除
  5. 跳轉到 index 頁面

先在 index 頁面加上按鈕

<h1>顯示 post 的 index 頁面</h1>
<%= link("新增文章", to: Routes.post_path(@conn, :new), class: "button") %>
<%= for post <- @posts do %>
  <article>
    <h2><%= post.title %></h2>
    <p><%= post.body %></p>
    <div>
      <%= link("編輯", to: Routes.post_path(@conn, :edit, post)) %>
      <%= link("刪除",
        to: Routes.post_path(@conn, :delete, post),
        method: :delete,
        data: [confirm: "確定嗎?"]
      ) %>

      <%= link("閱讀更多", to: Routes.post_path(@conn, :show, post)) %>
    </div>
  </article>
<% end %>

來看一下 這次的 link 方法

link("刪除", to: Routes.post_path(@conn, :delete, post), method: :delete,  data: [confirm: "確定嗎?"])

因應我們這次要呼叫 delete 路徑要用的是 delete 方法,所以這邊要加 method: :delete
另外 data: [confirm: "確定嗎?"] 在產生的 html 會變成 data-confirm="確定嗎?"
這個會跳出瀏覽器的 confirm 對話框來提醒,確定的話才會送出

delete

編輯 PostController 加上 delete 方法

  def delete(conn, %{"id" => id}) do
    # 拿到要刪除的 post
    post = Posts.get_post(id)

    # 刪除 post
    {:ok, _post} = Posts.delete_post(post)

    # 跳轉到 index
    redirect(conn, to: Routes.post_path(conn, :index))
  end

上一篇
{18, Phoenix, "新增"}
下一篇
{20, LiveView, "LiveView構造"}
系列文
速成 Phoenix, 2022年最受喜愛框架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言