加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails:为同一个URL显示不同的视图?

发布时间:2020-12-17 02:59:07 所属栏目:百科 来源:网络整理
导读:首先,我正在尝试做的一个例子: 如果您转到http://www.meetup.com而您尚未登录,则会看到显示“做某事?了解某事……”等页面,这是一个公共页面 但是当你登录时,同一页面(URL)显示’欢迎,xxx ……发生了什么……’等特定于你.这也是我在我的应用程序中尝试做的
首先,我正在尝试做的一个例子:

>如果您转到http://www.meetup.com而您尚未登录,则会看到显示“做某事?了解某事……”等页面,这是一个公共页面
>但是当你登录时,同一页面(URL)显示’欢迎,xxx ……发生了什么……’等特定于你.这也是我在我的应用程序中尝试做的事情.

如何在Rails 2.3.8中解决这个问题?

到目前为止,我有:

>一个AboutsController旨在提供半静态页面(希望关于不是复数!)
>根路线是map.root => :controller => “关于”.

现在,当未登录用户访问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重定向到某个路径,除非用户登录.

这是处理这类事情的事实上的铁路方式.非常好的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读