基本的なブログアプリケーション(Post
)については、post#show
の最後に新しいコメントフォームを表示したいと考えています。しかし、私はそれを構築してweb/templates/comment/form.html.eex
をweb/templates/user/show.html.eex
にレンダリングする仕組みに固執しています。アプリケーション:私が最初に持ってPost
コントローラで投稿の最後に新しいコメントフォームを表示する#show
mix phoenix.new my_app
cd my_app
mix ecto.create
mix phoenix.gen.html Post posts content:string
mix phoenix.gen.html Comment comments content:string \
post_id:references:posts
mix ecto.migrate
ウェブ/モデル/ post.ex
defmodule MyApp.Post do
use MyApp.Web, :model
schema "posts" do
field :content, :string
has_many :comments, MyApp.Comment
timestamps
end
@required_fields ~w(content)
@optional_fields ~w()
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
ウェブ/モデル/ comment.ex
defmodule MyApp.Comment do
use MyApp.Web, :model
schema "comments" do
field :content, :string
belongs_to :post, MyApp.Post
timestamps
end
@required_fields ~w(content post_id)
@optional_fields ~w()
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
問題。このコードは(key :post not found in: %{}
エラー)は動作しません:
ウェブ/コントローラ/ post_controller.ex
[...]
def show(conn, %{"id" => id}) do
post = Repo.get!(Post, id)
changeset =
conn.assigns.post
|> build_assoc(:comments)
|> Comment.changeset()
render(conn, "show.html", post: post, changeset: changeset)
end
[...]
次の問題は、私はどのようにフォームをレンダリングするためには考えているということです。次のコードは動作しません:
ウェブ/テンプレート/ポスト/ show.html.eex
<h2>Show post</h2>
<ul>
<li>
<strong>Content:</strong>
<%= @post.content %>
</li>
</ul>
<%= render "comment/form.html", changeset: @changeset,
action: comment_path(@conn, :create) %>
私はこれをどのように修正することができますか?それは、変数の実際の名前だとweb/controllers/post_controller.ex
で