I’m trying to update my old codes in Phoenix 1.3 to 1.4, but I have this error:
structs expect an :id key when converting to_param or a custom implementation of the Phoenix.Param protocol (read Phoenix.Param docs for more information), got: ~N[2018-12-01 19:23:39]
my code for delete query:
def delete_cards(id) do
card = get_card_by_id(id)
|> CarditemSchema.changeset
case Repo.delete(card) do
{:ok, _} -> {:ok}
{:error, changeset} -> {:error, changeset}
end
end
my code in controller:
def cards_delete(conn, %{"id" => id}) do
case CardItemQuery.delete_cards(id) do
{:ok} ->
conn
|> put_flash(:info, "کارت مورد نظر با موفقیت حذف شد.")
|> redirect(to: "/card-admin/card/category ")
{:error, _changeset} ->
conn
|> put_flash(:error, "کارت مورد نظر وجود ندارد")
|> redirect(to: "/card-admin/card/category ")
end
end
and my html:
<%= link "Delete", to: Routes.admin_dashbord_path(@conn, :cards_delete, card), method: :delete, data: [confirm: "Are you sure?"] %>
I have read this Phoenix.Param link document and I added @derive {Phoenix.Param, key: :id}
in my schema, like this:
defmodule WeddingCard.DB.CarditemSchema do
use Ecto.Schema
@derive {Phoenix.Param, key: :id}
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "wedding_card_item" do
field :status, :boolean, null: false
field :code, :string, null: false
field :title, :string, size: 100, null: false
field :price, :string, null: false
field :pic_one, :string, null: false
field :pic_two, :string, null: false
field :video, :string, null: false
belongs_to :wedding_card_category, WeddingCard.DB.CardCategorySchema, foreign_key: :wedding_card_category_id, type: :binary_id
timestamps()
end
but it wasn’t fixed, how can I fix this?
my router:
delete "/card/cards/delete", AdminDashbordController, :cards_delete
Thanks.