acke

acke

Changeset struct undefined in Phoenix 1.7

Changeset struct undefined

Hello everbody. I’m just getting started learning Phoenix and I’m trying to create a basic Github clone as a learning project. I got stuck on an issue regarding the changeset struct, and couldn’t fix my problem with some googling.

Problem

I’m following this tutorial to create the file uploading system. I’ve added one additional field (see the migration below), other than that I followed the tutorial pretty closely. I’m currently at the step where he is testing his module using the changeset function in IEX. I’ve tried the following in IEX:

iex -S mix
alias Gutter.Gits.Upload
%Upload{}

and get the following error:

Gutter.Gits.Upload.__struct__/1 is undefined, cannot expand struct Gutter.Gits.Upload. Make sure the struct name is correct. If the struct name exists and is correct but it still cannot be found, you likely have cyclic module usage in your code

This is my Gutter.Gits.Upload module, stored in a file named upload.ex

defmodule Gutter.Gits.Upload do
  use Ecto.Schema
  import Ecto.Changeset

  schema "uploads" do
    field :size, :integer
    field :filename, :string
    field :hash, :string
    field :user_id, :string

    timestamps()
  end

  @doc false
  def changeset(upload, attrs) do
    upload
    |> cast(attrs, [:filename, :size, :hash, :user_id])
    |> validate_required([:filename, :size, :hash, :user_id])
    |> validate_number(:size, greater_than: 0)
    |> validate_length(:hash, is: 64)
    |> unique_constraint(:filename)
  end
end

The migration used to create the module:

defmodule Gutter.Repo.Migrations.CreateUploads do
  use Ecto.Migration

  def change do
    create table(:uploads) do
      add :filename, :string
      add :size, :bigint
      add :hash, :string, size: 64
      add :user_id, references(:users, on_delete: :delete_all), null: false

      timestamps()
    end
    create index(:uploads, [:hash])
  end
end

I feel that the error is pretty simple but can’t figure out what it is. From what I understand the struct name is correct, and I don’t think that I have any cyclical module usage since my program mostly contains generated code. Thanks for reading :slight_smile:

Marked As Solved

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

Hey @acke welcome! As a basic sanity check, can you tell us where the file you have defmodule Gutter.Gits.Upload do is located in your project? Does it have a .ex or a .exs extension?

Also Liked

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

We have all been there, no worries!

acke

acke

Well, now I feel really stupid. I somehow got mixed up and was working in the wrong project directory, so it obviously didn’t work. I guess that goes to show the importance of basic sanity checks :smiley:. Thanks for the help!

Last Post!

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

We have all been there, no worries!

Where Next?

Popular in Questions Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New

Other popular topics Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 54921 245
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement