[英]Parsing JSON in an Elixir/Phoenix application, not inside a controler or model, but from “/lib”
[英]Elixir/Phoenix saving JSON to Postgres Database
我用Google搜索了很多方法來做到這一點。
我使用phx.gen
生成器生成一些CRUD。 我想在我的數據庫中創建repos並為它存儲Github活動。
我的遷移:
def change do
create table(:coderepos) do
add :name, :string
add :description, :string
add :repo_name, :string
add :activity_data_raw, :jsonb
timestamps()
end
end
我的模特:
schema "coderepos" do
field :activity_data_raw, :map, default: %{}
field :name, :string
field :description, :string
field :repo_name, :string
timestamps()
end
創建我的新倉庫(通過生成的HTML):
#Ecto.Changeset<
action: :insert,
changes: %{
description: "Blah",
name: "Blah",
repo_name: "blah"
},
errors: [activity_data_raw: {"is invalid", [type: :map, validation: :cast]}],
data: #App.Integrations.CodeRepo<>,
valid?: false
>
我通過在我的控制器中create
函數的:error
響應中執行IO.inspect(changeset)
來獲取上面的IO.inspect(changeset)
。
我的創建功能:
def create(conn, %{"code_repo" => code_repo_params}) do
case Integrations.create_code_repo(code_repo_params) do
{:ok, code_repo} ->
conn
|> put_flash(:info, "Code repo created successfully.")
|> redirect(to: code_repo_path(conn, :show, code_repo))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
IO.inspect(changeset)
end
end
這是我在表單中提交的JSON(以及名稱,描述和回購名稱):
[{"week": 1532822400, "total": 6, "days": [0, 6, 0, 0, 0, 0, 0]}]
(只需將保存添加到我的數據庫中,我可以在我的應用程序中執行其他操作,因此沒有任何問題)。
Postgres 10.4,Elixir 1.6.5 / OTP 20,Phoenix 1.3.3,Phoenix Ecto 3.2
任何幫助將不勝感激!
感謝Elixir Slack中的@trevoke ,現在正在運行。 你需要傳遞一張地圖(這是很明顯的我猜,雖然我讀到的其他地方聽起來像這樣照顧)。 Dogbert在上面的評論中基本上是在說同樣的話。
在create
函數中:
raw = Map.get(code_repo_params, "activity_data_raw")
code_repo_params = Map.put(code_repo_params, "activity_data_raw", %{"data" => raw})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.