我正在更改默认的CRUD控制器操作,以便我在page_controller.ex
:
def main(conn, _params) do
empresas = Repo.all(Empresa)
changesetEmpresas = Empresa.changeset(%Empresa{})
scrollTo = conn.assigns.scrollTo
render(conn, "main.html", changesetEmpresas: changesetEmpresas, empresas: empresas, scrollTo: scrollTo)
end
此句柄请求/mainEmpresas
。
然后我在我的empresa_controller.ex
此代码中处理create
操作:
def create(conn, %{"empresa" => empresa_params}) do
changeset = Empresa.changeset(%Empresa{}, empresa_params)
case Repo.insert(changeset) do
{:ok, _empresa} ->
conn
|> put_flash(:info, "Empresa criada com sucesso.")
|> assign(:scrollTo, "bottom")
|> redirect(to: "/mainEmpresas")
{:error, changeset} ->
render(conn, "newError.html", changesetEmpresas: changeset)
end
end
我的目标是将scrollTo
的值bottom
从create
empresa_controller.ex
行动传递到main
page_controller.ex
行动/mainEmpresas
以某种方式,当我重定向到scrollTo
时,我可以在那里使用它,但我无法做到。
此外,我还要保证,当没有scrollTo = conn.assigns.scrollTo
值传递时,{{1}}不会中断。
答案 0 :(得分:2)
这里的问题是conn
仅适用于每个请求。重定向将由您的客户端和新的conn
创建新请求。
解决方案是将scrollTo
值覆盖为GET参数。
致电redirect(conn, to: empresas_path(conn, :main, %{scrollTo: "bottom"}))
或redirect(conn, to: "/mainEmpresas?scrollTo=bottom")
。
并将您的empresa_controller.ex
更改为以下内容:
def main(conn, %{"scrollTo" => scrollTo}) do
# With 'scrollTo' parameter
end
def main(conn, _params) do
# Without 'scrollTo' parameter
end
希望有所帮助。