无法回购将值插入到一个Ares_to字段中

时间:2018-09-18 11:23:02

标签: elixir ecto phoenix

我目前有一个表,该表具有一个与另一个表具有belongs_to关系的字段。当我尝试使用Repo.insert向该字段添加值时,出现“ is_invalid”错误。该错误是由种子文件和手动命令行生成的。

要插入的结构为:

Repo.insert! %Customer_list{
    age: 24,
    first_name: "Tony",
    last_name: "Stark",
    customer_id: "D00001",
    list_date: ~D[2018-09-13],
    consultant_id: 8
  }

模型:

defmodule InformAPI.CTL.Customer_list do
  use Ecto.Schema
  import Ecto.Changeset


  schema "customer_lists" do
    field :age, :integer
    field :first_name, :string
    field :last_name, :string
    field :customer_id, :string
    field :list_date, :date
    belongs_to :consultant_id, InformAPI.CTL.Customer_list_consultants

    timestamps()
  end

  @doc false
  def changeset(customer_list, attrs) do
    Customer_list
    |> cast(attrs, [:customer_id, :first_name, :age, :last_name,  :list_date, :consultant_id])
    |> validate_required([:customer_id, :first_name, :age, :last_name,  :consultant_id, ])
  end
end

可以正确输入除“ consultant_id”以外的所有字段。 “ consultant_id”是Postgres DB中的bigint类型字段。 Customer_lists数据库具有以下键:

customer_lists_consultant_id_fkey
customer_lists_pkey
customer_lists_consultant_id_index

customer_lists_consultants表具有:

customer_list_consultants_pkey

我不确定什么无效。 consultant_id字段将不接受任何类型的值(字符串,整数等)。

1 个答案:

答案 0 :(得分:3)

默认情况下,Ecto假定belongs_to关系的实际数据库列是声明的名称加上"_id"。在您的情况下,Ecto假定该列的名称为consultant_id_id,因此consultant_id忽略了cast的值。

解决方法是将关系的名称更改为consultant

belongs_to :consultant, InformAPI.CTL.Customer_list_consultants