【发布时间】:2016-10-21 04:35:37
【问题描述】:
我正在尝试将列表插入到类型为 {:array, :string} 的字段中,但在提交表单后不断收到“无效”错误。这是我的相关代码:
迁移
def change do
alter table(:articles) do
add :images, {:array, :string}
end
end
模型
schema "articles" do
...
field :images, {:array, :string}
...
end
@required_fields ~w(title content user_id)
@optional_fields ~w(images)
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> validate_length(:title, max: 78)
|> strip_unsafe_content(params)
end
...
控制器
def create(conn, %{"article" => %{"images" => nil} = article_params}) do
changeset = Article.changeset(%Article{}, article_params)
case Repo.insert(changeset) do
{:ok, article} ->
conn
|> put_flash(:info, "Article created successfully.")
|> redirect(to: article_path(conn, :show, article))
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
def create(conn, %{"article" => %{"images" => images} = article_params}) do
images = String.split(images, ",", trim: true)
changeset = Article.changeset(%Article{}, article_params)
|> Ecto.Changeset.change(images: images)
case Repo.insert(changeset) do
{:ok, article} ->
conn
|> put_flash(:info, "Article created successfully.")
|> redirect(to: article_path(conn, :show, article))
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
变更集
%Ecto.Changeset{action: :insert,
changes: %{content: "\tTest",
images: ["images/articles/hh_2016/1.jpg", "images/articles/hh_2016/2.jpg",
"images/articles/hh_2016/3.jpg", "images/articles/hh_2016/4.jpg",
"images/articles/hh_2016/5.jpg", "images/articles/hh_2016/6.jpg",
"images/articles/hh_2016/7.jpg", "images/articles/hh_2016/8.jpg"],
title: "Test", user_id: 31},
constraints: [],
errors: [images: "is invalid"],
...
}
我猜我错过了一些基本的东西,但无法弄清楚。任何帮助表示赞赏!如果您需要更多代码,请告诉我。
【问题讨论】:
-
您能告诉我们您是如何调用
changeset函数(两个参数的值)的吗? -
我的错,我不小心漏掉了控制器部分。
标签: elixir phoenix-framework ecto