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