【问题标题】:in `insert` does not match type :integer在“插入”中的类型不匹配:整数
【发布时间】:2019-10-29 21:20:38
【问题描述】:

insertTakso.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

【问题讨论】:

    标签: phoenix-framework phoenix


    【解决方案1】:
    <%= 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)
    

    【讨论】:

      【解决方案2】:

      estimated_distance整数

        schema "bookings" do
          field :estimated_distance, :integer
          timestamps()
        end
      

      但是输入的参数返回字符串类型。因此它说“2”不匹配整数。

      所以我建议通过使用 Integer.parse/2 或更改字段 :estimated_distance, :string 来将参数解析为整数

      【讨论】:

        猜你喜欢
        • 2015-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-25
        相关资源
        最近更新 更多