长生不老药 - Ecto 变更集成功和失败代码不再 运行

elixir - Ecto changeset success and failure code no longer running

此代码用于将字符串添加到 messages 变量,然后在 http 响应中将它们发回。现在没有任何内容被添加到 messages 变量中。 :ok 和 :error 块中的代码行不再运行。我现在应该在哪里处理错误和成功案例,以添加错误和成功消息?

  messages = {}

  changeset = Api.UserProduct.changeset(
    user_product, %{:voted_vegan => true}
  )

  case Api.Repo.update(changeset) do
      {:ok, product} -> 
        IO.puts("appending messages7")
        messages = Tuple.append(messages, "Product updated")
      {:error, changeset} -> 
        IO.puts("appending messages8")
        messages = Tuple.append(messages, "Product not updated")
  end

  conn
      |> put_resp_content_type("application/json")
      |> send_resp(200, Poison.encode!(%{
          successs: "success",
          errors: Tuple.to_list(messages)
      }))

您的 case 表达式没有副作用,您应该将 case 表达式的返回值(将是执行分支中最后一个表达式的值)分配给 messages 变量。

messages = {}

changeset =
  Api.UserProduct.changeset(
    user_product,
    %{:voted_vegan => true}
  )

messages =
  case Api.Repo.update(changeset) do
    {:ok, product} ->
      IO.puts("appending messages7")
      Tuple.append(messages, "Product updated")

    {:error, changeset} ->
      IO.puts("appending messages8")
      Tuple.append(messages, "Product not updated")
  end

conn
|> put_resp_content_type("application/json")
|> send_resp(
  200,
  Poison.encode!(%{
    successs: "success",
    errors: Tuple.to_list(messages)
  })
)