私は以下のチェンジセットを使用して連絡先フォームを持っています。Phoenix 1.3でフォームを送信しようとすると、予想されるparamsがマップエラーになる可能性があります。
def changeset(%Email{} = email, attrs) do
email
|> cast(attrs, [:name, :email, :message, :event])
|> validate_required([:name, :email, :message])
end
しかし、私はフォームを送信しようとすると、私は次のエラーを取得する:
expected params to be a map, got: `#Ecto.Changeset<action: nil, changes: %
{email: "[email protected]", event: "wedding", message: "hello", name: "Simon"},
errors: [], data: #Iotc.Contact.Email<>, valid?: true>`
は、関数を作成し、私の次のとおりです。
def create(conn, %{"email" => email_params}) do
changeset = Contact.Email.changeset(%Iotc.Contact.Email{}, email_params)
case Contact.create_email(changeset) do
{:ok, email} ->
conn
|> put_flash(:info, "Email sent")
|> redirect(to: email_path(conn, :index))
{:error, changeset} ->
conn
|> put_flash(:error, "Something went wrong")
|> render("index.html", changeset: changeset)
end
end
私はそれがattrs
を拾っていないと仮定しています?
そしてcontact.exから:
def create_email(attrs \\ %{}) do
%Email{}
|> Email.changeset(attrs)
|> Repo.insert()
end
できますが、 'Contact.create_email'の定義を投稿しますか?チェンジセットを受け入れるのか、それともattrsだけを受け入れるのですか?私はあなたが 'Contact.create_email(email_params)'をしたいと思う。 – Dogbert
@DogbertがOP –