保留凤凰创建行动中的错误路线

时间:2016-04-16 14:33:30

标签: elixir phoenix-framework

我的凤凰行动看起来像:

  def create(conn, %{"user" => user_params}) do
    changeset = User.changeset(%User{}, user_params)
    case Repo.insert(changeset) do
      {:ok, user} ->
        conn
        |> put_flash(:info, "#{user.name} created!")
        |> redirect(to: user_path(conn, :index))
      {:error, changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end

关于验证错误,它会使用验证错误呈现相应的表单,但它不会保留相应的路径,例如,/users/new代替/users显示POST,因为它正在尝试create对资源。似乎因为它应该保留新路线,但我知道我们现在处于new行动中。有没有办法'重定向'并仍然保留变更集?我希望我可能需要更改 def new(conn, _params) do changeset = User.changeset(%User{}) render conn, "new.html", changeset: changeset end 操作签名中的变更集以将状态传递给该操作,但不确定这是否有其他后果我可能会后悔。我的新动作:

out

1 个答案:

答案 0 :(得分:1)

不幸的是凤凰城没有这样的东西。为了简单起见,流程始终是一个方向。当您在浏览器中输入网址时,会conn创建并多次修改,但它无法修改之前的任何步骤。

重定向只是强制浏览器请求新网址,但它无法携带任何参数。它不是Phoenix的东西,而只是一般的HTTP规则。

如果你真的需要网址最后有/new,你可以尝试两种黑客之一:

  • 不那么难看:在new.html.eex中,一些javascript在页面加载时强行将网址设置为users/new
  • 更难看:打破api并强制创建操作以使用POST /users/new而不是POST /users。我真的不推荐那个,但我只是为了完整而提到它。