Внешнее значение вставляется как пустое в базу данных. как решить это? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь вставить данные в таблицу, где один из столбцов является внешним ключом. Я создал связь между таблицами, но внешний ключ вставляется как пустой.

У меня есть схема для 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 пусто. Я не понимаю, где я иду не так.

1 Ответ

0 голосов
/ 07 мая 2019

Вы ничего не делаете для обновления 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
...