我尝试使用另一个api的响应为我的Phoenix应用程序播种数据库。我不明白如何解析响应以从中创建新对象。我现在正在使用HTTPoisin和Poison
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
{"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}}
答案 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以供进一步参考 - 特别是要了解他们如何构建创建操作。