簡體   English   中英

Elixir / Phoenix將JSON保存到Postgres數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM