postgresql - 外部值在数据库中作为空白插入。如何解决这个问题?
问题描述
我正在尝试在其中一列是外键的表中插入数据。我已经创建了表之间的关联,但外键被插入为空白。
我有一个 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
我正在尝试将数据插入角色表,数据角色名称被插入,但外键 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 字段为空。我不明白我哪里出错了。
解决方案
你没有做任何更新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
推荐阅读
- qnamaker - QnAMaker 是从答案中学习,还是仅从问题中学习?
- sql - sql 必须声明标量变量
- php - [DB2 for i5/OS]SQL0104 - 令牌?无效。有效标记:) ,., SQL 状态 37000
- node.js - 为什么我的负载均衡器后面的两台服务器都响应每个 HTTP 请求?
- linux - Docker 守护进程日志占用过多磁盘空间
- php - 使用 Retrofit2 POST 时它不起作用
- gmail - 在电子邮件中添加 Gmail Go-To Actions
- git - GIT:git如何知道文本文件的变化?
- php - 为 textarea 或 emojiarea 添加 spintax(旋转语法)支持
- openmdao - OpenMDAO:求解器收敛到非最优点