ruby-on-rails – 是否可以在Rails中指定两个根页面(一个用于匿
我正在构建一个具有静态页面和动态页面(与产品相关)的产品.这两类页面都有不同的发布生命周期.与设计师合作的营销团队,发布静态页面和产品页面由工程团队发布.
静态页面位于public / home中,它们是自包含的.除了提供链接之外,他们不需要访问Rails基础结构. 在此设置中,我试图实现以下行为: >当未经身份验证的访问者启动http://www.xyz.com时,应将用户带到静态登录页面. 在我当前的实现中,我检查用户是否在Rails世界中进行了身份验证并呈现静态页面或产品页面. 我想知道以下内容: 1)你如何处理这种情况? 2)有没有办法避免进入静态主页的Rails堆栈. 3)是否有root_path方法的自定义,以根据上下文返回不同的根 解决方法
常见的答案如下: class LandingsController < ApplicationController before_filter :login_required def index ... end ... private def login_required if not_logged_in? # This methods depends on your authentication strategy send_file "/your/static/path/#{params[:action]}",:type => "application/html charset=utf8;" return false # Halt chain end end send_file documentation 并且,根据每个操作和模板之间的对应关系,您可以进一步将login_required方法抽象到ApplicationController中,并验证文件是否存在.
是.你必须接受我的话,因为我自己没有这样做,但你可以使用Rack middleware来做到这一点. Here is an example如何做类似的事情,除了不是重定向,你将静态地提供文件(只需将文件头和File.read的结果设置为内容)这取决于你正在使用的身份验证库,虽然.
您无法定义条件路由(即,在routes.rb文件中定义多个路由),但您可以覆盖ApplicationController中的root_url方法,假设您在路径定义中使用了命名路径根.就像是 class ApplicationController def root_url(*options) if logged_in? "/return/something/custom" else super(*options) end end end 然而,这听起来真是一个坏主意,因为1)你应该指向同一个网址,并让控制器处理请求(你的链接应该是盲目的你带到哪里),2)它可能会破坏其他的东西依赖于root_url和root_path方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |