gpt4 book ai didi

ruby-on-rails - 从更新操作重定向到编辑的引荐来源网址

转载 作者:行者123 更新时间:2023-12-03 17:33:54 26 4
gpt4 key购买 nike

我的 Rails 2.3 应用程序有一个用户模型和通常的 Controller 操作。可以通过两种方式访问​​编辑表单:当用户从主页编辑自己的个人资料时,或者当管理员用户从用户集合中编辑其他人的个人资料时。

我想做的是将更新操作重定向回编辑操作的引用,而不是更新操作。如果我在更新中执行一个简单的 redirect_to(:back),它会返回到编辑表单——不好。

一种解决方案是完全忘记引荐来源网址并根据当前用户和更新后的用户进行重定向:如果它们相同,则返回主页,否则转到用户集合页面。如果我向编辑表单添加第三条路径,这将会中断。我怀疑我是否会这样做,但我更喜欢一个不那么脆弱的解决方案。

另一种解决方案是将编辑表单的引荐来源网址存储在隐藏字段中,然后从更新操作内部重定向到该值。这感觉不太对,但我无法解释原因。

有没有更好的方法?或者,我应该停止担心并选择我提到的两个之一吗?

最佳答案

您可以记住 session 中的 url。这就是我在我的应用程序中实现此功能的方式。

将这些方法添加到您的 ApplicationController

def store_location location=nil
session[:return_to] = location || request.request_uri
end

def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end

def http_referrer
http_referer, request_path = request.env["HTTP_REFERER"],
request.env["REQUEST_PATH"]
return nil unless (http_referer and request_path and
http_referer =~ Regexp.new("^#{SITE_ROOT}") and
http_referer != (SITE_ROOT + request_path))
return http_referer
end

UserController edit/new 操作中存储 referrer。

before_filter :store_location, :only => [:new, :edit]

def store_location
super http_referrer
end

UserController create/update 操作中返回并重置 referrer。

def create
if @user.save
flash[:notice] = "Successfully created the user."
redirect_back_or_default root_url
else
render :action => 'new'
end
end

def update
if @user.save
flash[:notice] = "Successfully created the user."
redirect_back_or_default root_url
else
render :action => 'new'
end
end

关于ruby-on-rails - 从更新操作重定向到编辑的引荐来源网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437325/

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