Phoenix/Elixir/Ecto.CastError: Невозможно привести значение `"new"` in `where` для ввода:id в запросе: from u в MyApp.User,

Я использую Программирование Phoenix, добавляя функцию "Новый пользователь" в свое приложение:

Я получаю следующую ошибку:

deps/ecto/lib/ecto/repo/queryable.ex:188: value `"new"` in `where` cannot be cast to type :id in query:

from u in Microflow.User,
where: u.id == ^"new"

Error when casting value to `Microflow.User.id`

Блок кода до deps / ecto / lib /ecto/repo/queryable.ex:188 находится здесь:

defp query_for_get(_repo, queryable, id) do
  query = Queryable.to_query(queryable)
  model = assert_model!(query)
  primary_key = primary_key_field!(model)
  Ecto.Query.from(x in query, where: field(x, ^primary_key) == ^id) 

Строка 188:

Ecto.Query.from(x in query, where: field(x, ^primary_key) == ^id) 

Обновление контроллера пользователя здесь:

def create(conn, %{"user" => user_params}) do
  changeset = User.changeset(%User{}, user_params)
  case Repo.insert(changeset) do
    {:ok, user} ->
      conn
      |> put_flash(:info, "#{user.name} created!")
      |> redirect(to: user_path(conn, :index))
  {:error, changeset} ->
    render(conn, "new.html", changeset: changeset)
  end
end

Пример EEX здесь:

<h1>New User</h1>

 <%= form_for @changeset, user_path(@conn, :create), fn f -> %>
    <div class="form-group">

 <%= text_input f, :name, placeholder: "Name", class: "form-control" %>
    </div>

<%= form_for @changeset, user_path(@conn, :create), fn f -> %>
  <div class="form-group">

<%= text_input f, :name, placeholder: "Name", class: "form-control" %>
  </div>

<div class="form-group">
<%= text_input f, :username, placeholder: "Username", class: "form-control" %>
</div>

<div class="form-group">

<%= password_input f, :password, placeholder: "Password", class: "form-control" %>
</div>

<%= submit "Create User", class: "btn btn-primary" %>

<% end %>

Есть идеи, что я могу сделать? Спасибо, если вы можете помочь.

Связанное обсуждение здесь:

http://slack.elixirhq.com/phoenix/2015-09-11/

1 ответ

Решение

Исправлено путем удаления этой строки:

get "/users/:id", Microflow.UserController, :show

и добавив это:

resources "/users", Microflow.UserController 

Я не знаю, почему небольшое изменение вызовет такую ​​ошибку, но я перепроверил ее 5 раз. Я видел много ошибок маршрутизации, но ни одна из них не вызвала такого непонятного сообщения об ошибке.

Другие вопросы по тегам