Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot expand struct - elixir/phoenix

I'm trying to display a form on the screen. But I keep getting this error when I try to start the server. locations_controller.ex == ** (CompileError) web/controllers/locations_controller.ex:5: Locations.__struct__/1 is undefined, cannot expand struct Locations. BTW I'm new to elixir so I'm probably doing something really obvious wrong.

Here is my code:

locations.controller.ex

 def new(conn, _params) do
    changeset = Locations.changeset(%Locations{})

    render conn, "new.html", changeset: changeset
  end

  def create(conn, %{"locations" => %{ "start" => start, "end" => finish }}) do
    changeset = %AwesomeLunch.Locations{start: start, end: finish}
    Repo.insert(changeset)

    redirect conn, to: locations_path(conn, :index)
  end

VIEW

<h1>Hey There</h1>

<%= form_for @changeset, locations_path(@conn, :create), fn f -> %>

  <label>
    Start: <%= text_input f, :start %>
  </label>

  <label>
    End: <%= text_input f, :end %>
  </label>

  <%= submit "Pick An Awesome Lunch" %>

<% end %>

model

    defmodule AwesomeLunch.Locations do
  use AwesomeLunch.Web, :model

  use Ecto.Schema
  import Ecto.Changeset

  schema "locations" do
    field :start
    field :end
  end

  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:start, :end])
    |> validate_required([:start, :end])
  end
end

Like I said I'm getting this error:

    locations_controller.ex ==
** (CompileError) web/controllers/locations_controller.ex:5: Locations.__struct__/1 is undefined, cannot expand struct Locations
like image 877
Bitwise Avatar asked Dec 03 '16 17:12

Bitwise


1 Answers

Modules in Elixir need to be referred to by their full name or an alias of it. You can either change all Locations to AwesomeLunch.Locations, or if you want to use a shorter name, you can call alias in that module:

defmodule AwesomeLunch.LocationsController do
  alias AwesomeLunch.Locations

  ...
end
like image 160
Dogbert Avatar answered Sep 19 '22 13:09

Dogbert