函数 Map.put/4 未定义或私有

function Map.put/4 is undefined or private

刚开始学丹药和凤凰

我正在尝试向博客添加评论,但出现此错误

function Map.put/4 is undefined or private

错误在这一行 (show.html.heex):

<%= render "comment_form.html", Map.put(assigns, :changeset, :action, Routes.post_post_path(@conn, :add_comment, @post)) %>

我的代码在post_controller.ex

  def show(conn, %{"id" => id}) do
      post =
          id
            |> Posts.get_post!
            |> Repo.preload([:comments])

      changeset = Comment.changeset(%Comment{}, %{})
      render(conn, "show.html", post: post, changeset: changeset)
  end

和comment_form.html.heex

<%= form_for @changeset, @action, fn f -> %>
    <div class="form-group">
        <label>Name</label>
        <%= text_input f, :name, class: "form-control" %>
    </div>
    <div class="form-group">
        <label>Content</label>
        <%= textarea f, :content, class: "form-control" %>
    </div>
    <div class="form-group">
        <%= submit "Add comment", class: "btn btn-primary" %>
    </div>
<% end %>

您可能不小心在代码中添加了:changeset

- Map.put(assigns, :changeset, :action, Routes.post_post_path(@conn, :add_comment, @post))
+ Map.put(assigns, :action, Routes.post_post_path(@conn, :add_comment, @post))

Map.put/3 可以将新的键值对放入现有的映射中。这里3表示arity(参数个数)为3。

在您的情况下,将 :changeset 的新赋值放入已经包含该键的继承赋值中毫无意义。