No function clause matching in Jason.Encoder.ModuleName.encode/2

Hi, I have a nested preload which I need to convert to a json in my controller and I used @drive in my schema file, but when I call it, it shows me this error:

** (FunctionClauseError) no function clause matching in Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2

    The following arguments were given to Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2:

elixir: v1.11.1
phoenix: 1.5.6
mac the last version

my schema file:

defmodule Joboffer.Admin.Consulting.ConsultingCategorySchema do
  use Ecto.Schema

  # @derive {Jason.Encoder, only: [:id, :title, :short_description, :description, :image, :alias_link, :consulting_category_id]}
  @derive {Jason.Encoder, only: [:name, :short_description]}

  import Ecto.Changeset
  @primary_key {:id, :binary_id, autogenerate: true}
  @foreign_key_type :binary_id



  schema "consulting_categories" do

    field :title, :string, size: 150, null: false
    field :short_description, :string, size: 164, null: true
    field :description, :string,  null: true
    field :image, :string, size: 200, null: true
    field :alias_link, :string, size: 200, null: false
    field :status, :boolean, null: false

    has_many :consulting_headlines, Joboffer.Admin.Consulting.ConsultingHeadlineSchema,  foreign_key: :consulting_category_id, on_delete: :nothing
    has_many :consulting_answers, Joboffer.Admin.Consulting.ConsultingAnswerSchema,  foreign_key: :consulting_category_id, on_delete: :nothing
    timestamps()
  end

  @all_fields ~w(title short_description description image alias_link status)a
  @all_required ~w(title alias_link status)a

  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, @all_fields)
    |> validate_required(@all_required, message: "فیلد مذکور نمی تواند خالی باشد.")
    |> validate_length(:title, min: 3, max: 150, message: "حداکثر کاراکتر در تیتر مجموعه ۱۵۰ و حداقل ۳ کاراکتر می باشد.")
    |> validate_length(:short_description, min: 3, max: 164, message: "حداکثر کاراکتر در توضیحات کوتاه مجموعه 164 و حداقل ۳ کاراکتر می باشد.")
    |> validate_length(:image, min: 3, max: 200, message: "حداکثر کاراکتر در تصویر مجموعه 200 و حداقل ۳ کاراکتر می باشد.")
    |> validate_length(:alias_link, max: 200, message: "حداکثر ۲۰۰ کاراکتر")
  end
end

##full terminal error:

** (FunctionClauseError) no function clause matching in Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2

    The following arguments were given to Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2:

        # 1
        %Joboffer.Admin.Consulting.ConsultingCategorySchema{
          __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_categories">,
          alias_link: "شهروندی",
          consulting_answers: #Ecto.Association.NotLoaded<association :consulting_answers is not loaded>,
          consulting_headlines: [
            %Joboffer.Admin.Consulting.ConsultingHeadlineSchema{
              __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_headlines">,
              consulting_categories: #Ecto.Association.NotLoaded<association :consulting_categories is not loaded>,
              consulting_category_id: "8846e216-3f2c-46f1-b404-cebcc6fadb5f",
              consulting_options: [
                %Joboffer.Admin.Consulting.ConsultingOptionsSchema{
                  __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_options">,
                  consulting_headline_id: "2d5ff0ea-b109-4147-9e07-223ddf9e63b5",
                  consulting_headlines: #Ecto.Association.NotLoaded<association :consulting_headlines is not loaded>,
                  id: "85827aa6-07fe-4aa1-9375-bc51c4a124f4",
                  inserted_at: ~N[2020-10-25 16:01:39],
                  question: "سوال بعد از اشکال چیست ؟",
                  score: 12,
                  status: true,
                  updated_at: ~N[2020-10-25 17:20:54]
                },
                %Joboffer.Admin.Consulting.ConsultingOptionsSchema{
                  __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_options">,
                  consulting_headline_id: "2d5ff0ea-b109-4147-9e07-223ddf9e63b5",
                  consulting_headlines: #Ecto.Association.NotLoaded<association :consulting_headlines is not loaded>,
                  id: "6c924163-d987-4746-ab7b-b3f56354e99e",
                  inserted_at: ~N[2020-10-25 17:21:31],
                  question: "دیدن شدن به وسیله دشمن چیست؟",
                  score: 98,
                  status: true,
                  updated_at: ~N[2020-10-25 17:21:31]
                }
              ],
              id: "2d5ff0ea-b109-4147-9e07-223ddf9e63b5",
              inserted_at: ~N[2020-10-25 13:26:04],
              short_description: "این سوال به ما کمک می کند که رابطه بهتری برای امتیاز دهی شما پیدا کنیم",
              status: true,
              title: "شما در چه رنج سنی هستید",
              updated_at: ~N[2020-10-25 13:26:04]
            }
          ],
          description: "<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>",
          id: "8846e216-3f2c-46f1-b404-cebcc6fadb5f",
          image: "https://trangell.com/dl/cms-content/special/asan-pardakht.jpg",
          inserted_at: ~N[2020-10-25 10:38:24],
          short_description: "در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.",
          status: true,
          title: "آزمون ساختار شهروندی",
          updated_at: ~N[2020-10-25 10:38:24]
        }

        # 2
        {#Function<3.48815102/3 in Jason.Encode."-fun.escape_json/3-">,
         #Function<1.48815102/3 in Jason.Encode."-fun.map_naive/3-">}

    Attempted function clauses (showing 1 out of 1):

        def encode(%{name: name, short_description: short_description}, {escape, encode_map})

    (joboffer 0.1.0) lib/joboffer/admin/consulting/consulting_category_schema.ex:13: Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2
    (jason 1.2.2) lib/encode.ex:143: Jason.Encode.list/3
    (jason 1.2.2) lib/encode.ex:35: Jason.Encode.encode/2
    (jason 1.2.2) lib/jason.ex:125: Jason.encode/2

my controller:

  def category(conn, %{"id" => category_id}) do
    conn
    |> put_status(200)
    |> json(%{categories: Consulting.show_category(category_id)})
  end

my query

  def show_category(category_id) do
    query = from u in ConsultingCategorySchema,
        where: u.id == ^category_id,
        where: u.status == true,
        order_by: [desc: u.inserted_at],
        left_join: c in assoc(u, :consulting_headlines),
        where: c.status == true,
        order_by: [asc: c.inserted_at],
        left_join: j in assoc(c, :consulting_options),
        where: j.status == true,
        order_by: [asc: j.inserted_at],
        preload: [consulting_headlines: {c, consulting_options: j}]
    Repo.all(query)
  end

There is no key name in your schema, maybe title?

1 Like

I edited this before
@kokolegorille

def encode(%{id: id, title: title, short_description: short_description, description: description, image: image, alias_link: alias_link, consulting_category_id: consulting_category_id}, {escape, encode_map})

this is the last line of my error, all the field I selected exist in my schema:

defmodule Joboffer.Admin.Consulting.ConsultingCategorySchema do
  use Ecto.Schema

  @derive {Jason.Encoder, only: [:id, :title, :short_description, :description, :image, :alias_link, :consulting_category_id]}

  import Ecto.Changeset
  @primary_key {:id, :binary_id, autogenerate: true}
  @foreign_key_type :binary_id



  schema "consulting_categories" do
    field :title, :string, size: 150, null: false
    field :short_description, :string, size: 164, null: true
    field :description, :string,  null: true
    field :image, :string, size: 200, null: true
    field :alias_link, :string, size: 200, null: false
    field :status, :boolean, null: false

    has_many :consulting_headlines, Joboffer.Admin.Consulting.ConsultingHeadlineSchema,  foreign_key: :consulting_category_id, on_delete: :nothing
    has_many :consulting_answers, Joboffer.Admin.Consulting.ConsultingAnswerSchema,  foreign_key: :consulting_category_id, on_delete: :nothing
    timestamps()
  end

  @all_fields ~w(title short_description description image alias_link status)a
  @all_required ~w(title alias_link status)a

end

full error:

** (FunctionClauseError) no function clause matching in Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2

    The following arguments were given to Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2:

        # 1
        %Joboffer.Admin.Consulting.ConsultingCategorySchema{
          __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_categories">,
          alias_link: "شهروندی",
          consulting_answers: #Ecto.Association.NotLoaded<association :consulting_answers is not loaded>,
          consulting_headlines: [
            %Joboffer.Admin.Consulting.ConsultingHeadlineSchema{
              __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_headlines">,
              consulting_categories: #Ecto.Association.NotLoaded<association :consulting_categories is not loaded>,
              consulting_category_id: "8846e216-3f2c-46f1-b404-cebcc6fadb5f",
              consulting_options: [
                %Joboffer.Admin.Consulting.ConsultingOptionsSchema{
                  __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_options">,
                  consulting_headline_id: "2d5ff0ea-b109-4147-9e07-223ddf9e63b5",
                  consulting_headlines: #Ecto.Association.NotLoaded<association :consulting_headlines is not loaded>,
                  id: "85827aa6-07fe-4aa1-9375-bc51c4a124f4",
                  inserted_at: ~N[2020-10-25 16:01:39],
                  question: "سوال بعد از اشکال چیست ؟",
                  score: 12,
                  status: true,
                  updated_at: ~N[2020-10-25 17:20:54]
                },
                %Joboffer.Admin.Consulting.ConsultingOptionsSchema{
                  __meta__: #Ecto.Schema.Metadata<:loaded, "consulting_options">,
                  consulting_headline_id: "2d5ff0ea-b109-4147-9e07-223ddf9e63b5",
                  consulting_headlines: #Ecto.Association.NotLoaded<association :consulting_headlines is not loaded>,
                  id: "6c924163-d987-4746-ab7b-b3f56354e99e",
                  inserted_at: ~N[2020-10-25 17:21:31],
                  question: "دیدن شدن به وسیله دشمن چیست؟",
                  score: 98,
                  status: true,
                  updated_at: ~N[2020-10-25 17:21:31]
                }
              ],
              id: "2d5ff0ea-b109-4147-9e07-223ddf9e63b5",
              inserted_at: ~N[2020-10-25 13:26:04],
              short_description: "این سوال به ما کمک می کند که رابطه بهتری برای امتیاز دهی شما پیدا کنیم",
              status: true,
              title: "شما در چه رنج سنی هستید",
              updated_at: ~N[2020-10-25 13:26:04]
            }
          ],
          description: "<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>\r\n<p class=\"card-text\">در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.</p>",
          id: "8846e216-3f2c-46f1-b404-cebcc6fadb5f",
          image: "https://trangell.com/dl/cms-content/special/asan-pardakht.jpg",
          inserted_at: ~N[2020-10-25 10:38:24],
          short_description: "در این بخش شما می توانید برای هر دسته از سوالات خودتان یک مجموعه بسازید و به واسطه دکمه سرفصل برای هر مجموعه سرفصلی را ایجاد کنید.",
          status: true,
          title: "آزمون ساختار شهروندی",
          updated_at: ~N[2020-10-25 10:38:24]
        }

        # 2
        {#Function<3.48815102/3 in Jason.Encode."-fun.escape_json/3-">,
         #Function<1.48815102/3 in Jason.Encode."-fun.map_naive/3-">}

    Attempted function clauses (showing 1 out of 1):

        def encode(%{id: id, title: title, short_description: short_description, description: description, image: image, alias_link: alias_link, consulting_category_id: consulting_category_id}, {escape, encode_map})

    (joboffer 0.1.0) lib/joboffer/admin/consulting/consulting_category_schema.ex:12: Jason.Encoder.Joboffer.Admin.Consulting.ConsultingCategorySchema.encode/2
    (jason 1.2.2) lib/encode.ex:143: Jason.Encode.list/3
    (jason 1.2.2) lib/encode.ex:35: Jason.Encode.encode/2
    (jason 1.2.2) lib/jason.ex:125: Jason.encode/2