我需要为rails应用程序创建动态重定向模型。它类似于wordpress重定向插件,如果你随时使用它。 http://wordpress.org/plugins/redirection/
模型将存储的是redirect_this_path
字符串,应将final_path
重定向到该字符串。因此,如果用户访问我的应用程序请求redirect_this_path
,他将被重定向到final_path
。
但是,如果在数据库中找不到匹配的条目,则应将请求转发到routes.rb
文件中定义的其他路由。因此,基本上重定向模型将过滤所有请求并重定向其拥有数据的请求,并将其他请求转发给已在routes.rb
文件中定义的路由。
有什么方法可以实现,有什么建议吗?
答案 0 :(得分:0)
不确定我理解正确,但也许这适合你?
在routes.rb上:
get 'redirect/path', to: redirect('final/path')
答案 1 :(得分:0)
您应该执行以下操作:(例如在应用程序控制器中)
def path_check
if request.path == path_that_needs_redirecting
redirect_to final_path
end
end
然后简单地使用:(在应用程序或您需要的每个控制器中)
before_filter :path_check
希望有所帮助
修改强>
如果您有许多需要重定向的路径,请执行
if paths_that_need_redirecting.include? request.path
答案 2 :(得分:0)
@Piotr Kruczek很接近,但听起来你想要将每条路径重定向到它自己独特的final_path
,你实际上需要做这样的事情:
appliction_controller.rb
before_filter :path_check
def path_check
if ModelName.find_by_column_name(request.path)
redirect_to ModelName.find_by_column_name(request.path).final_path
else
redirect_to deafult_path
end
end
答案 3 :(得分:0)
最简单的方法 - 定义自定义网址助手并将所有魔法放在那里。但更有趣的方式是...攻击Rails内部并击败它的sh * t。例如:ActionDispatch and url_for。我不确定,但也许你可以实现自定义路由机制:
def url_for(options = nil)
case options
when nil
_routes.url_for(url_options.symbolize_keys)
when Hash
_routes.url_for(options.symbolize_keys.reverse_merge!(url_options))
when String
options
when Array
polymorphic_url(options, options.extract_options!)
else
polymorphic_url(options)
end
end
我相信使用提供给此方法的参数,您将能够实例化模型并从中请求自定义URL(或者如果出现问题,则继续进行基本处理)。
然而,猴子修补Rails ......它闻起来。更清洁的方法是将其提取到单独的gem并通过您自己的测试套件覆盖它。