iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Modern Web

速成 Phoenix, 2022年最受喜愛框架系列 第 16

{16, Phoenix, "接收送出的表格"}

  • 分享至 

  • xImage
  •  

建立 update 方法

在 Router 用 resources 建立的 Restful 路徑中,每一次的連線要求都是獨立的要求,
所以儘管我們剛剛已經在產生 edit 頁面的時候得到我們要的 post,
但是在我們送出表格時,送出表格的這個連線已經是全新的要求了,
所以我們還是要在 controller 的 update 中用 id 取得 post,再來更新他。

update 要做的事情有

  1. 用 id 取得準備要更新的 post
  2. 用表格送出的內容 (params) 來嘗試更新 post
  3. 如果更新成功,跳轉到 show 頁面
  4. 如果更新失敗,重新顯示表格
  def update(conn, %{"id" => id, "post" => post_params}) do
    post = Posts.get_post(id) # 一樣取得準爆要更新的 post

    # 使用 Posts.update_post 方法來更新 post,並依照回傳的結果使用 case 來決定後續動作
    case Posts.update_post(post, post_params) do
      # 成功會回傳 :ok 與更新過的 post
      # 並把網頁跳轉到 post 的 show 頁面
      {:ok, post} ->
        redirect(conn, to: Routes.post_path(conn, :show, post))

      # 如果失敗,例如 title 沒有填,就會回傳 {:error, changeset}
      # 那我們用回傳的 changeset 來再顯示一次 edit 與表格
      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, :edit, post: post, changeset: changeset)
    end
  end

上一篇
{15, Phoenix, "用 form 顯示 changeset"}
下一篇
{17, Phoenix, "顯示表格錯誤與通知"}
系列文
速成 Phoenix, 2022年最受喜愛框架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言