从json响应播种Phoenix Repo

时间:2015-08-14 19:08:37

标签: json elixir phoenix-framework

我尝试使用另一个api的响应为我的Phoenix应用程序播种数据库。我不明白如何解析响应以从中创建新对象。我现在正在使用HTTPoisinPoison

seed.ex

defmodule NewsApplication.Article do
  use Ecto.Model

  schema "articles" do
    field  :label, :string
    field  :slug, :string
    field  :full_path, :string
    field  :content_cache, :string
    field  :position, :integer, default: 0
    field  :children_count, :integer, default: 0
    field  :is_published, :boolean, default: false
    field  :is_shared, :boolean, default: false
    field  :featured, :boolean, default: false
    field  :score, :integer

    timestamps
  end
end

网/模型/ article.ex

更新

{"articles":
  [{
    "article":{
      "id":436,
      "updated":"2015-08-14T11:51:21.931Z",
      "title":"Celebrating It's 50th Issue",
      "numberOfViews":0,
      "numberOfFavorites":2,
      "imageURLs":["http://.../images/1549/original/axye.png"],
      "tags":["Company News"],
      "isFeatured":false,
      "isPublished":true,
      "published":"2015-07-28T17:00:00.000Z"
    }
  }]
}

样本回复

{{1}}

1 个答案:

答案 0 :(得分:1)

看起来你几乎就在那里,但却遗漏了几件事。

您希望使用Enum.each遍历每篇文章回复,并将这些回复保存到数据库中,如下所示:

Article.changeset(%Article{}, json)
|> Repo.insert

将它们放在一起,它就是这样的:

Enum.each articles_json, fn(article) ->
  Article.changeset(%Article{}, json)
  |> Repo.insert
end

如果Repo.insert无效,则不会处理changeset上的任何错误,但除此之外它将起作用。

我建议您仔细阅读Phoenix docs for models以供进一步参考 - 特别是要了解他们如何构建创建操作。