我试图在其中一列是外键的表中插入数据。我创建了表之间的关联,但是外键被插入为空白。
我有一个用于user_type的架构
buildscript {
ext.kotlin_version = '1.3.0'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:5.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:3.4.0'
}
}
allprojects {
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.google.firebase') {
details.useVersion "15.+"
}
}
}
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
并具有另一个角色架构
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
并且我正在尝试将数据插入到角色表中,插入了数据role_name,但是外键user_type为空。
请帮助我
这些是我的postgres表:
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表
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字段为空。我不知道我哪里出了错。
答案 0 :(得分:0)
您不执行任何操作来更新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