elixir-Ecto变更集成功和失败代码不再运行

时间:2019-03-09 23:16:38

标签: elixir ecto

此代码用于将字符串添加到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)
      }))

1 个答案:

答案 0 :(得分:1)

您的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)
  })
)