ruby-on-rails – Rails:为同一个URL显示不同的视图?
首先,我正在尝试做的一个例子:
>如果您转到http://www.meetup.com而您尚未登录,则会看到显示“做某事?了解某事……”等页面,这是一个公共页面 如何在Rails 2.3.8中解决这个问题? 到目前为止,我有: >一个AboutsController旨在提供半静态页面(希望关于不是复数!) 现在,当未登录用户访问http://www.abc.com时,他将获得有关/ index的视图内容.到现在为止还挺好. 但是,当用户登录时,我希望产品/索引视图应显示为相同的URL,即http://www.example.com URL(而不是http://www.example.com/products) 这在Rails 2.3.8中是否可行? 解决方法
最简洁的方法是使用名为before_filter的东西.它是控制器顶部的一个命令,在该控制器中的任何操作(您想要的)之前调用.通常,您需要对控制器中的多个操作执行相同的检查,因此将该检查直接放入每个操作中是没有意义的.
假设您有一个Comments控制器,并且您希望编辑,更新和销毁操作只是登录用户可以执行的操作.这很常见.我们来看一个例子.为了简洁起见,我不会拼出所有的控制器动作,只是单独的东西: class CommentsController < ApplicationController before_filter :user_logged_in?,:only => [:edit,:update,:destroy] # all your actions would go here - index,show,etc # protected def user_logged_in? redirect_to dashboard_path unless current_user end end 在上面的例子中,user_logged_in?方法将在运行编辑,更新或销毁操作之前运行.如果在该方法中调用渲染或重定向,则rails将停止并且永远不会运行该操作.这就是为什么它被称为过滤器.相反,它将尊重给定的渲染或重定向请求. current_user方法是大多数用户身份验证插件为您提供的常见帮助程序,如果没有当前用户,则通常为nil.所以我们的过滤方法告诉rails重定向到某个路径,除非用户登录. 这是处理这类事情的事实上的铁路方式.非常好的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |