postgresql 外部值在数据库中作为空白插入,如何解决此问题?

0sgqnhkj  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(152)

我正尝试在其中一个列是外键的表中插入数据。我已创建表之间的关联,但插入的外键为空。
我有user_type的模式

schema “user_type” do
  field(:type, :string)
  has_many(:roles, Accreditor.Role.Roles, foreign_key: :user_type)

  timestamps()
end

def changeset(user_type, attrs) do
  user_type
  |> cast(attrs, [:type])
  |> validate_required([:type])
  |> unique_constraint(:type)
end

并拥有另一个角色架构

schema “roles” do
  field(:role_name, :string)
  #field(:user_type, :id)
  has_many(:permissions, Accreditor.Permissions.RolePermissions, 
  foreign_key: :role_id)
  belongs_to(:user_type, UserType)

  timestamps()
end

@doc false
def changeset(roles, attrs) do
  roles
  |> cast(attrs, [:role_name])
  |> validate_required([:role_name])
  |> unique_constraint(:role_name)
end

并且我试图将数据插入到roles表中,插入了数据role_name,但外键user_type为空。
请帮帮我
以下是我的postgres表:

select * from user_type;
id | type | inserted_at | updated_at
----±------±--------------------±--------------------
 1 | ADMIN | 2019-05-06 09:19:24 | 2019-05-06 09:19:24

这是我的user_type表

select * from roles;
id | role_name | user_type | inserted_at | updated_at
----±----------±----------±--------------------±--------------------
1 | SUPER | | 2019-05-06 09:37:30 | 2019-05-06 09:37:30

而这是我的角色表,其中user_type字段为空。我不明白我哪里出错了。

trnvg8h3

trnvg8h31#

您没有执行任何操作来更新user_type,为什么要更新它?使用Ecto.Changeset.cast_assoc/3插入一个关联,类似于:

def changeset(roles, attrs) do
  roles
  |> cast(attrs, [:role_name])
# ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
  |> cast_assoc(:user_type, , with: &UserType.changeset/2)
# ⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑
  |> validate_required([:role_name])
  |> unique_constraint(:role_name)
end

相关问题