【发布时间】:2022-02-03 00:22:34
【问题描述】:
我正在尝试在表格之间建立关联。
我目前有一个 "users" 表,其中包含以下字段:
| id | password | first_name | last_name | role | |
|---|---|---|---|---|---|
| 1 | teacher@example.io | hash | Bob | White | teacher |
| 2 | student@example.io | hash | Joe | Brown | student |
我正在尝试实现两种新的用户类型:教师和学生
因此,我想为两种用户类型创建两个不同的表,它们将像这样引用主表:
- 教师表
| id | user_id | first_name | last_name |
|---|---|---|---|
| 1 | 1 (reference to "users") | Bob | White |
- 学生表
| id | user_id | first_name | last_name |
|---|---|---|---|
| 1 | 2 (reference to "users") | Joe | Brown |
我生成了一个新的迁移并创建了“教师”表,如下所示:
create table("teachers") do
add :user_id, references("users")
add :first_name, :string
add :last_name, :string
end
然后我为教师表定义了一个架构,如下所示:
schema "teachers" do
field :first_name, :string
field :last_name, :string
belongs_to :user, User
最后,我将它添加到用户架构中:
has_many :teachers, Teacher
我现在已经成功地添加了我想要的列的教师表。问题是,我的注册表只包含一个变更集。用户模式进行所有验证,并在注册成功时将用户添加到“用户”表中。但“教师”表仍然是空的。用注册用户的信息填充教师表的最佳做法是什么?
【问题讨论】:
-
您可以做的是,在用户的有效变更集上,您填充教师或学生条目
标签: elixir schema phoenix-framework ecto phoenix-live-view