web-dev-qa-db-fra.com

Impossible d'élargir struct - elixir/phoenix

J'essaie d'afficher un formulaire à l'écran. Mais je continue à avoir cette erreur lorsque j'essaie de démarrer le serveur. locations_controller.ex == ** (CompileError) web/controllers/locations_controller.ex:5: Locations.__struct__/1 is undefined, cannot expand struct Locations. BTW je suis nouveau à l'élixir donc je fais probablement quelque chose de vraiment évident faux.

Voici mon 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

VUE

<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 %>

modèle

    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

Comme je l'ai dit je reçois cette erreur:

    locations_controller.ex ==
** (CompileError) web/controllers/locations_controller.ex:5: Locations.__struct__/1 is undefined, cannot expand struct Locations
13
Bitwise

Les modules dans Elixir doivent être désignés par leur nom complet ou par un alias. Vous pouvez changer tous les Locations en AwesomeLunch.Locations ou, si vous souhaitez utiliser un nom plus court, vous pouvez appeler alias dans ce module:

defmodule AwesomeLunch.LocationsController do
  alias AwesomeLunch.Locations

  ...
end
18
Dogbert

J'ai eu la même erreur et pour moi cela a fonctionné à configurer le contrôleur, de cette façon:

defmodule AwesomeLunch.LocationsController do
  use AwesomeLunch.Web, :controller

  alias AwesomeLunch.Locations

  ...
end
0
Isa Souza