为什么将赋值中的值从一个控制器传递给另一个控制器不起作用?
Why passing a value in assigns from one controller to another is not working?
我正在更改默认的 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
从我在 empresa_controller.ex
中的 create
操作传递到我在 [=] 中的 main
操作12=] 以某种方式,当我重定向到 /mainEmpresas
时,我在那里可以使用它,但我无法做到。
此外,我想保证当没有 scrollTo
值被传递时 scrollTo = conn.assigns.scrollTo
不会中断。
您的问题是 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
希望对您有所帮助。
我正在更改默认的 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
从我在 empresa_controller.ex
中的 create
操作传递到我在 [=] 中的 main
操作12=] 以某种方式,当我重定向到 /mainEmpresas
时,我在那里可以使用它,但我无法做到。
此外,我想保证当没有 scrollTo
值被传递时 scrollTo = conn.assigns.scrollTo
不会中断。
您的问题是 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
希望对您有所帮助。