长生不老药地图改变结构

西蒙·h

我的凤凰代码缺少一些基本知识

这是在我的控制器中

  def show(conn, %{"id" => id}) do
    user = Repo.get!(User, id)

    query =
        from c in Card,
            where: c.user_id == 1,
            select: {c.id, c.inserted_at, c.estimate_name, c.product}
    estimates = Repo.all(query)

    render(conn, "show.json", %{user: user, estimates: estimates})
    # render(conn, "show.json", user: user)
  end

在我看来

  # def render("show.json", %{user: user}) do
  def render("show.json", %{user: user, estimates: estimates}) do
    %{data: render_one(%{user: user, estimates: estimates}, Api.UserView, "user.json") }
    # %{data: render_one(user, Api.UserView, "user.json")}

    #  ** New code since original post **
    # %{data: render("user.json", %{user: user, estimates: estimates})}
  end

  def render("user.json", %{user: user, estimates: estimates}) do
  # def render("user.json", %{user: user}) do
    %{id: user.id,
      firstname: user.firstname,
      lastname: user.lastname,
      email: user.email,
      customerId: user.customerId,
      estimates: render("estimates.json", estimates)}  # **Line with last error**
  end

  def render("estimates.json", [head | _estimates]) do
    #   Enum.map(estimates, fn estimate -> render(mapper estimate, MosaicApi.UserView, "summaryEstimate.json") } end)
    # render(mapper(head), MosaicApi.UserView, "summaryEstimate.json")
    render("summaryEstimate.json", mapper(head))

  end

  # ** I'm fear I have added unnecessary complexity here **
  def mapper({id, date, name, product}) do
      %{id: id,
        creation_date: date,
        estimate_name: name,
        product: product}
  end

  def render("summaryEstimate.json", estimate) do
    %{id: estimate.id,
      estimate_name: estimate.estimate_name,
      product: estimate.product}
  end

但是出现错误,这似乎是因为我的数据已从%{user: ..., estimates: [...]}变为%{user: %{estimates:[...], user: %{...}}

那是怎么发生的,我该如何预防呢?

Could not render "user.json" for MosaicApi.UserView, please define a matching clause for render/2 or define a template at "web/templates/user". No templates were compiled for this module.

Assigns:

%{user: %{estimates: [{1, #Ecto.DateTime<2016-04-26T12:01:34Z>, "cards for annabelle", "Business Cards"}, ...], user: %Api.User{__meta__: #Ecto.Schema.Metadata<:loaded>, customerId: "CUST", email: "[email protected]", firstname: "fname 1", id: 1, inserted_at: #Ecto.DateTime<2016-04-26T11:46:21Z>, jobs: #Ecto.Association.NotLoaded<association :jobs is not loaded>, lastname: "lname 1", updated_at: #Ecto.DateTime<2016-04-26T11:46:21Z>}}, view_module: Api.UserView, view_template: "user.json"}
气体

所述render_one / 4render_many / 4的功能从视图活用的受让人的名称。在Phoenix Framework中的“呈现多对多关系JSON”中对此进行了解释

因此,当您致电时会发生什么:

render_one(%{user: user, estimates: estimates}, Api.UserView, "user.json")

是否render使用以下参数调用该函数:

render("user.json", %{user: %{user: %{...}, estimates: [...]})

您可以使用as以下方法更改分配名称

render_one(%{user: user, estimates: estimates}, Api.UserView, "user.json", as: :data)

它将使用以下命令调用render:

render("user.json", %{data: %{user: %{...}, estimates: [...]})

您可以将其与以下项匹配:

def render("user.json", %{data: %{user: user, estimates: estimates}}) do

您可以通过render直接调用而不是使用来避免这种情况render_one

render("user.json", %{user: user, estimates: estimates})

另一种选择是使用将估计值嵌套在用户结构内部的数据结构。也许通过向您的架构添加虚拟属性。

编辑

  def render("show.json", %{user: user, estimates: estimates}) do
    %{data: render("user.json", %{user: user, estimates: estimates})}
  end

  def render("user.json", %{user: user, estimates: estimates}) do
    %{id: user.id,
      ...
      estimates: render_many(estimates, __MODULE__, "estimates.json", estimates. as: estimate)}
  end

  def render("estimates.json", %{estimate: {id, _date, name, product}}) do
    %{id: id,
      estimate_name: name,
      product: product}
  end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

长生不老药地图改变结构

来自分类Dev

长生不老药-改变行为

来自分类Dev

更新长生不老药地图

来自分类Dev

更新长生不老药地图

来自分类Dev

长生不老药:定义地图/散列的类型规范

来自分类Dev

长生不老药中的语言结构与宏

来自分类Dev

在线用户存储长生不老药

来自分类Dev

什么事 在长生不老药

来自分类Dev

长生不老药:流到运行

来自分类Dev

编译长生不老药权限被拒绝

来自分类Dev

步骤列表与长生不老药

来自分类Dev

长生不老药:模式匹配或守卫

来自分类Dev

长生不老药:同时启动流程

来自分类Dev

在流明中使用长生不老药

来自分类Dev

长生不老药赶上来

来自分类Dev

长生不老药中的嵌套循环

来自分类Dev

返回地图还是转换为地图?字数长生不老药

来自分类Dev

这个长生不老药地图的例子有什么问题?

来自分类Dev

我们如何将列表列表转换为地图?(长生不老药)

来自分类Dev

如何在长生不老药中的地图上创建“哈希”或“ md5”?

来自分类Dev

Concat 两个列表与地图在长生不老药更有效

来自分类Dev

在宏中生成长生不老药结构的正确方法

来自分类Dev

模式匹配长生不老药记录植物学结构

来自分类Dev

如何在长生不老药中使用defdelegate?

来自分类Dev

长生不老药中的&+ / 2是什么?

来自分类Dev

长生不老药和Gulp-复制并连接

来自分类Dev

哪些情况需要投掷/接住长生不老药?

来自分类Dev

成语长生不老药要嵌套列表项?

来自分类Dev

在长生不老药中,Haskell的init函数是否等效?