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:
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
<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 %>
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With