我已经谷歌搜索过很多关于如何做这个的方法。
我使用了
我的迁移:
在创建我的新仓库时(通过生成的HTML),
这是我在表单中提交的JSON代码片段(包括名称、说明和存储库名称):
我使用了
phx.gen
生成器来生成一些CRUD。 我想在我的数据库中创建仓库并存储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)
来获取上面的更改集。
我的创建函数:
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。如果您能提供任何帮助,将不胜感激!
activity_data_raw
传递吗?你已经定义它为一个映射,而不是列表。 - Dogbert{:array, :map}
。 - Dogbert[{"week": 1501977600, "total": 0, "days": [0, 0, 0, 0, 0, 0, 0]}, {"week": 1502582400, "total": 0, "days": [0, 0, 0, 0, 0, 0, 0]}, {"week": 1503187200, "total": 0, "days": [0, 0, 0, 0, 0, 0, 0]}]
由于字符长度限制,我无法粘贴全部内容,但它只是更多相同的内容。我尝试按照您的建议更新类型,但它仍然显示为无效。附言:感谢您迄今为止的时间!非常感谢。 - RuZ