誰かが投稿を更新すると、ニュースフィードテーブルにエントリが追加されるブログアプリケーションがあります。次のようにPost
とNewsfeed
スキーマは、次のとおりです。ここでEcto.Multiでレコードを更新する際の問題
mix phx.new.json Content Post posts title:string content:string
mix phx.new.json Content Newsfeed newsfeeds message:string
は、ラッパー関数である:
def updateContent(%{id: id, content: content}, _info) do
post = Repo.get(post, id)
Content.update_content_and_add_to_newsfeed(post, %{id: id, content: content})
end
そしてここでは、コンテンツのコンテキスト内のロジックである:ここで
def update_content_and_add_to_newsfeed(post, %{id: id, content: content}) do
multi =
Multi.new
|> Multi.update(:post, update_post(post, %{content: content}))
|> Multi.insert(:newsfeed, %Newsfeed{message: "post updated"})
case Repo.transaction(multi) do
{:ok, %{post: post}} ->
{:ok, post}
{:error, _} ->
{:error, "Error"}
end
end
はupdate_postです機能:
def update_post(%Post{} = post, attrs) do
post
|> Post.changeset(attrs)
|> Repo.update()
end
私は、このコードは、データベース内のコンテンツの更新を実行しますが、何のニュースフィード項目が挿入されません、と私は、コンソールでこのエラーメッセージが表示されたら:
Server: localhost:4000 (http)
Request: POST /graphiql
** (exit) an exception was raised:
** (FunctionClauseError) no function clause matching in Ecto.Multi.update/4
任意のアイデアはどのようにこの問題を解決するために?私は、Absinthe
とecto v2.2.6とphoenix 1.3を使用しています。
{:_、エラーを}' '代わりの{:エラー、_、_、_}'。 'update_post'メソッドのコードを投稿することもできますか? – Sheharyar
上記の更新を参照 –