J'ajoute plusieurs champs à un formulaire:KeyError au POST/postes clés: sujets non trouvés dans:% {changeset: # Ecto.Changeset
Je les ai ajouté à post.ex
field :name_of_gallery, :string
field :future_plans_title, :string
les ajouter à la changeset dans stories.ex:
defp post_changeset(%Post{} = post, attrs \\ %{}) do
post
|> cast(attrs, [:title, :body, :user_id, :published, :original_post_id, :topic_id, :plan, :done_so_far_one, :done_so_far_two, :done_so_far_three, :done_so_far_one_title, :done_so_far_two_title, :done_so_far_three_title, :name_of_gallery, :future_plans_title])
|> cast_attachments(attrs, [:project_pic])
|> validate_required([:title, :body, :user_id, :topic_id, :plan, :done_so_far_one, :done_so_far_two, :done_so_far_three, :done_so_far_one_title, :done_so_far_two_title, :done_so_far_three_title, :project_pic, :name_of_gallery, :future_plans_title])
end
a fait deux fichiers de migration (une seule présentés ici):
defmodule Citybuilder.Repo.Migrations.AddNameOfGalleryToFields do
use Ecto.Migration
def change do
alter table (:stories_posts) do
add :future_plans_title, :string
end
end
end
Je couru:
mix ecto.drop
mix ecto.setup
mix ecto.migrate
mix run priv/repo/seeds.exs
... plus d'une fois.
Ils sont dans Postgres quand je vérifie psql:
name_of_gallery | caractère variable (255) | future_plans_title | character varying (255)
*
L'utilisateur ne peut enregistrer des formulaires plus. Enregistrement d'un formulaire utilisateur (qui a travaillé auparavant) retourne:
KeyError at POST /posts
key :topics not found in: %{changeset: #Ecto.Changeset<action: :insert, changes: %{body:
et une erreur sur la ligne:
<%= select f, :topic_id, topic_select(@conn.assigns.topics), class: "form-control form-control-topic", placeholder: "Select topic." %>
je un sujet menu de sélection, mais qui n'a jamais causé des problèmes avant.
*
Le message d'erreur entier (sur demande) est ici:
key :topics not found in: %{changeset: #Ecto.Changeset<action: :insert, changes: %{body: "My Project Summary", done_so_far_one: "Done So Far One Body", done_so_far_one_title: "Done So Far One Title", done_so_far_three: "Random Text to Test Form", done_so_far_three_title: "Random Text to Test Form", done_so_far_two: "Random Text to Test Form", done_so_far_two_title: "Random Text to Test Form", name_of_gallery: "Random Text to Test Form", plan: "My Project Plan", project_pic: %{file_name: "person-woman-park-music (1).jpg", updated_at: #Ecto.DateTime<2017-08-08 13:11:46>}, title: "My Project Title", topic_id: 1, user_id: 2}, errors: [future_plans_title: {"can't be blank", [validation: :required]}], data: #Citybuilder.Stories.Post<>, valid?: false>, layout: {Citybuilder.Web.LayoutView, "app.html"}, user: %Citybuilder.Auths.User{__meta__: #Ecto.Schema.Metadata<:loaded, "auths_users">, admin: false, encrypted_password: "$2b$12$MvDVJo01scAyrrBtnT1dpulbuj9uwDnS2ZezFeUhmzol7mJXRBYa6", id: 2, inserted_at: ~N[2017-08-08 12:20:13.948747], moderator: false, password: nil, password_confirmation: nil, updated_at: ~N[2017-08-08 12:20:13.970885], username: "jarvis"}}
Code contrôleur pour la poste et de nouvelles fonctions ici:
def new(conn, _params) do
default_topic = Stories.get_topic!(@default_topic)
changeset = Stories.change_post(
%Citybuilder.Stories.Post{},
%{topic_id: default_topic.id}
)
render(conn, "new.html", changeset: changeset)
end
def create(conn, %{"post" => post_params}) do
case Stories.create_post(post_params, conn.assigns.user) do
{:ok, post} ->
conn
# |> put_flash(:info, "Post created! ヽ(´▽`)/")
|> redirect(to: post_path(conn, :show, post))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
Je voudrais voir plus du message d'erreur et de la ligne sur laquelle il se bloque. Il semble que vous essayez d'accéder à 'changeset.topics' qui n'existe pas dans la structure' Ecto.Changeset'. – narrowtux
Il se bloque à la ligne 78, dernière ligne de la question. <% = sélectionnez f,: topic_id, topic_select (@ conn.assigns.topics), classe: "form-control form-control-topic", espace réservé: "Sélectionner un sujet". %> ... Je vais coller l'erreur. – RubyRube
Pouvez-vous poster votre code de contrôleur? – Dogbert