在 `insert` 中与类型不匹配:整数
in `insert` does not match type :integer
insert
中 Takso.Sales.Booking.estimated_distance
的值 "2"
与类型不匹配:整数
你好
我将 nr 2 插入文本字段并按下提交按钮。
我正在尝试创建一个文本输入字段并将整数值 2 添加到数据库中。为什么会发生此错误?我不明白,没有文档或示例如何创建接受数字的文本字段,请帮忙。试图查找过去 4 小时的信息,但什么也没有:(
new.html.eex
<div class="form-group">
<%= text_input booking, :estimated_distance, id: "estimated_distance", class: "form-control" %>
</div>
booking.ex
schema "bookings" do
field :estimated_distance, :integer
timestamps()
end
def changeset(struct, params \ %{}) do
struct
|> cast(params, [:estimated_distance])
|> validate_required([:estimated_distance])
end
booking_controller.ex
def new(conn, _params) do
changeset = Booking.changeset(%Booking{}, %{})
render conn, "new.html", changeset: changeset
end
def create(conn, %{"booking" => booking_params}) do
changeset = Booking.changeset(booking_struct, %{})
booking = Repo.insert!(changeset)
end
estimated_distance 是 整数
schema "bookings" do
field :estimated_distance, :integer
timestamps()
end
但是输入的参数 returns 字符串类型。因此它说“2”不匹配整数。
所以我建议通过使用 Integer.parse/2 或更改字段 :estimated_distance, :string 将参数解析为整数,以便于
<%= number_input booking, :distance, id: "distance", class: "form-control" %>
你可以把它改成数字输入,但真正的问题是这个,我仍然不明白为什么,但问题已经解决了:
里面booking_controller.ex
之前:
def create(conn, %{"booking" => booking_params}) do
booking_struct = Ecto.build_assoc(user, :bookings, Enum.map(booking_params, fn({key, value}) -> {String.to_atom(key), value} end))
changeset = Booking.changeset(booking_struct, %{})
|> Changeset.put_change(:status, "open")
booking = Repo.insert!(changeset)
之后:
def create(conn, %{"booking" => booking_params}) do
booking_struct = Ecto.build_assoc(user, :bookings, Enum.map(booking_params, fn({key, value}) -> {String.to_atom(key), value} end))
{d, _} = Integer.parse(booking_params["distance"])
changeset = Booking.changeset(booking_struct, %{})
|> Changeset.put_change(:status, "open")
|> Changeset.put_change(:distance, d)
booking = Repo.insert!(changeset)
insert
中 Takso.Sales.Booking.estimated_distance
的值 "2"
与类型不匹配:整数
你好
我将 nr 2 插入文本字段并按下提交按钮。
我正在尝试创建一个文本输入字段并将整数值 2 添加到数据库中。为什么会发生此错误?我不明白,没有文档或示例如何创建接受数字的文本字段,请帮忙。试图查找过去 4 小时的信息,但什么也没有:(
new.html.eex
<div class="form-group">
<%= text_input booking, :estimated_distance, id: "estimated_distance", class: "form-control" %>
</div>
booking.ex
schema "bookings" do
field :estimated_distance, :integer
timestamps()
end
def changeset(struct, params \ %{}) do
struct
|> cast(params, [:estimated_distance])
|> validate_required([:estimated_distance])
end
booking_controller.ex
def new(conn, _params) do
changeset = Booking.changeset(%Booking{}, %{})
render conn, "new.html", changeset: changeset
end
def create(conn, %{"booking" => booking_params}) do
changeset = Booking.changeset(booking_struct, %{})
booking = Repo.insert!(changeset)
end
estimated_distance 是 整数
schema "bookings" do
field :estimated_distance, :integer
timestamps()
end
但是输入的参数 returns 字符串类型。因此它说“2”不匹配整数。
所以我建议通过使用 Integer.parse/2 或更改字段 :estimated_distance, :string 将参数解析为整数,以便于
<%= number_input booking, :distance, id: "distance", class: "form-control" %>
你可以把它改成数字输入,但真正的问题是这个,我仍然不明白为什么,但问题已经解决了:
里面booking_controller.ex
之前:
def create(conn, %{"booking" => booking_params}) do
booking_struct = Ecto.build_assoc(user, :bookings, Enum.map(booking_params, fn({key, value}) -> {String.to_atom(key), value} end))
changeset = Booking.changeset(booking_struct, %{})
|> Changeset.put_change(:status, "open")
booking = Repo.insert!(changeset)
之后:
def create(conn, %{"booking" => booking_params}) do
booking_struct = Ecto.build_assoc(user, :bookings, Enum.map(booking_params, fn({key, value}) -> {String.to_atom(key), value} end))
{d, _} = Integer.parse(booking_params["distance"])
changeset = Booking.changeset(booking_struct, %{})
|> Changeset.put_change(:status, "open")
|> Changeset.put_change(:distance, d)
booking = Repo.insert!(changeset)