繁体   English   中英

Phoenix 不呈现关联

[英]Phoenix doesn't render associations

我有一个简单的 Todo/作者/评论

Todo has_many comments
Comment belongs_to Todo
Todo belongs_to Author
Author has_many todos
Author has_many comments
Comment belongs_to Author

如果我像这样渲染 todo_view.ex:

  def render("todo.json", %{todo: todo}) do
    %{id: todo.id,
      title: todo.title,
      description: todo.description,
      date: todo.date,
      author: author_json(todo.author)}
  end
  defp author_json(author) do
    %{name: author.name}
  end

当我访问/api/todos/api/comments时一切正常但是如果我想为 todos 添加评论列表:

  def render("todo.json", %{todo: todo}) do
    %{id: todo.id,
      title: todo.title,
      description: todo.description,
      date: todo.date,
      author: author_json(todo.author),
      comments: render_many(todo.comments, CommentView, "comment.json")}
  end

我在 comment_view.ex 中收到 KeyError

键:名称未在以下位置找到:#Ecto.Association.NotLoaded

  def render("comment.json", %{comment: comment}) do
    %{id: comment.id,
      content: comment.content,
      author: author_json(comment.author)}
  end
  defp author_json(author) do
    %{name: author.name}
  end

不知何故,Elixir 在查询待办事项时看不到评论/作者关联,但在查询评论时确实看到了。

我做了评论的预加载:

comments = Repo.all(Comment) |> Repo.preload(:author)

知道这里发生了什么吗?

当您从数据库中获取todos时,您是否预加载了author 像这样的东西:

todos = Todo |> Repo.all() |> Repo.preload([comments: [:author]])

这将为所有ToDos加载Comments及其Author关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM