gpt4 book ai didi

ruby-on-rails - rails : Displaying different view for the same URL?

转载 作者:行者123 更新时间:2023-12-03 15:57:52 24 4
gpt4 key购买 nike

首先,我正在尝试做的一个例子:

  • 如果你去http://www.meetup.com如果您没有登录,您会看到一个显示“做某事• 学习某事...”等的页面,这是一个公共(public)页面
  • 但是当您登录时,同一页面(URL)会显示“欢迎,xxx...发生了什么...”等,这是您特有的。这也是我在我的应用程序中尝试做的事情。

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

    到目前为止,我有:
  • 一个 AboutsController旨在提供半静态页面(希望 About 不是复数!)
  • 根路由是map.root => :controller => "about" .

  • 现在,当未登录用户访问 http://www.abc.com ,他会得到 View 的内容 about/index .到现在为止还挺好。

    但是,当用户登录时,我希望 products/index应该为相同的 URL 显示 View ,即 http://www.example.com URL(而不是 http://www.example.com/products )

    这在 Rails 2.3.8 中可行吗?

    最佳答案

    最干净的方法是使用称为 before_filter 的东西。它是 Controller 顶部的一个命令,在该 Controller 中的任何操作(您想要的)之前调用。通常,您会希望在 Controller 中对多个操作执行相同的检查,因此直接将该检查放入每个操作是没有意义的。

    假设您有一个 Comments Controller ,并且您希望编辑、更新和销毁操作成为只有登录用户才能执行的操作。这是很常见的。让我们看一个例子。为简洁起见,我不会详细说明所有 Controller 操作,仅说明独特的内容:

    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 重定向到某个路径,除非用户登录。

    这是处理此类事情的事实上的 Rails 方式。非常好的问题。

    关于ruby-on-rails - rails : Displaying different view for the same URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993148/

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