У меня есть столы, Category
и Subcategory
.Как я могу вставить идентификатор внешнего ключа с помощью канала?
Category
имеет много subcategories
и Subcategory
относится к category
.
В моем канале handle_in
есть функция для вставки подкатегории, как показано ниже.
def handle_in("create:subcategory", %{"name" => name, "category_id" => category_id}, socket) do
changeset = Subcategory.changeset(%Subcategory{name: name, category_id: category_id})
|>Repo.insert
subcategories = from(p in Pos8.Subcategory, select: map(p, [:id, :name, :category_id])) |> Repo.all
response = %{subcategories: subcategories}
broadcast! socket, "subcategories:updated", response
{:noreply, socket}
end
Поэтому в основном то, что я хочу сделать, это создать подкатегорию с name
и category_id
мимоходом. Но это вызывает ошибку, которая Myapp.Subcategory.category_id in insert does not match type :id (ecto) lib/ecto/repo/schema.ex:691: Ecto.Repo.Schema.dump_field!/6 (ecto) lib/ecto/repo/schema.ex:700: anonymous fn/6 in Ecto.Repo.Schema.dump_fields!/5
Как я могу вставить category_id
при создании subcategory
?
Заранее спасибо ..
спасибо, он работает! –
Или пусть 'changeset/2' обрабатывает преобразование:' Subcategory.changeset (% Subcategory {},% {name: name, category_id: category_id}) '. – Dogbert
Как @Dogbert указывает, позволяя сменой изменений справиться с этим лучше. Тем более, что вы не всегда можете иметь дело с целыми идентификаторами в будущем. –