Я пытаюсь преобразовать поле price
, представляющее собой строку (например, "2.22"
или ""
), в число с плавающей запятой или ноль, а затем добавить его в базу данных.
def insert_product_shop(conn, product_id, shop_id, price) do
priceFloat = nil
if price not in [""] do
price = elem(Float.parse(price), 0)
priceFloat = price / 1
IO.inspect(priceFloat)
else
priceFloat = nil
end
IO.inspect(priceFloat)
changeset = Api.ProductShop.changeset(%Api.ProductShop{
p_id: product_id,
s_id: shop_id,
price: priceFloat,
not_in_shop_count: 0,
is_in_shop_count: 0
})
errors = changeset.errors
valid = changeset.valid?
IO.inspect(changeset)
case insert(changeset) do
{:ok, product_shop} ->
{:ok, product_shop}
{:error, changeset} ->
{:error, :failure}
end
end
вывод:
2.22
nil
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: #Api.ProductShop<>,
valid?: true>
13:25:41.745 [debug] QUERY OK db=2.0ms
INSERT INTO "product_shops" ("is_in_shop_count","not_in_shop_count","p_id","s_id") VALUES ($1,$2,$3,$4) RETURNING "id" [0, 0, 40, 1]
Как показывает вывод, priceFloat
становится равным нулю, я предполагаю, потому что, когда я установил его на 2,22, он был вне области видимости. Может быть, мой код слишком обязателен. Как я могу переписать это, чтобы преобразовать "2.22" в 2.22, не делая его ноль, и разрешить "" преобразовать в ноль?