gpt4 book ai didi

phoenix-framework - Elixir/Phoenix 重定向到当前页面

转载 作者:行者123 更新时间:2023-12-01 15:50:38 26 4
gpt4 key购买 nike

我正在尝试在应用程序中实现不同的语言。所以我所做的是在 Session 的 db 中创建了 lang 变量,它保留了当前选择的语言。

问题是我正在通过更新操作调用和更新值:

def update(conn, %{"id" => id, "session" => session_params}) do
session = Repo.get!(Session, id)
changeset = Session.changeset(session, session_params)

case Repo.update(changeset) do
{:ok, _session} ->
conn
|> put_flash(:info, "Session updated successfully.")
|> redirect(to: page_path(conn, :tableshow))
{:error, changeset} ->
render(conn, "edit.html", session: session, changeset: changeset)
end
end

,将其重定向到特定路径(此处:page_path)。我的问题:一旦调用操作,是否可以获取当前路径并重定向到它?那么,当您更改语言时,它不会一直将您重定向到一个特定页面,而是重新加载当前页面,即调用操作的位置?
语言选择器在每个页面的标题中。所以我希望页面重新加载。有什么建议吗?

附加信息:我像这样从 app.html.eex 调用操作
<%= render Pos1.SessionView, "session_en.html", changeset: @changesetlang, action: session_path(@conn, :update, @session) %>

其中 session_en.html 是:
<%= form_for @changeset, @action, fn f -> %>
<%= hidden_input f, :lang, value: "1" %>
<%= submit "EN", class: "btn btn-primary" %>
<% end %>

最佳答案

一种方法是使用当前页面的 URL 添加另一个 hidden_input,并从 update 操作重定向到该 URL。

app.html.eex 中,更改 render 调用以将 @conn 作为 conn 传递:

<%= render Pos1.SessionView, "session_en.html", changeset: @changesetlang, action: session_path(@conn, :update, @session), conn: @conn %>

然后将新的 hidden_input 添加到 session_en.html.eex
<%= form_for @changeset, @action, fn f -> %>
<%= hidden_input f, :lang, value: "1" %>
<%= hidden_input f, :redirect_to, value: @conn.request_path %>
<%= submit "EN", class: "btn btn-primary" %>
<% end %>

最后,在 Controller 中,将 redirect 调用更改为:
|> redirect(to: session_params["redirect_to"])

编辑:您可能希望将 redirect_to 限制为仅指向您的站点。你可以用一个简单的 case 做到这一点:
redirect_to = case session_params["redirect_to"] do
path = "/" <> _ -> path
_ -> "/some/default/path"
end

然后
|> redirect(to: redirect_to)

谢谢 Scott S. 指出这一点。

关于phoenix-framework - Elixir/Phoenix 重定向到当前页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37627725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com