【问题标题】:How to get to different and multiple view from controller route Rails 4如何从控制器路由 Rails 4 获得不同的和多个视图
【发布时间】:2015-01-18 00:42:33
【问题描述】:

我正在将我制作的 Sinatra 应用程序移回 Rails 4。在我的 Sinatra 应用程序中,我有一个名为“logged_in”的助手,如果用户登录则返回 true,否则返回 false。然后在我的路线中,我有以下...

get '/' do
  if logged_in
    erb :"admin/a_index"
  else
    erb :index
  end
end

get '/about' do
  if logged_in
    erb :"admin/a_about"
  else
    erb :about
  end
end

get '/contact' do
  if logged_in
    erb :"admin/a_contact"
  else
    erb :contact
  end
end

因此,如果用户已登录,它将为该特定静态页面呈现不同的管理视图(位于子文件夹中)。如果用户没有登录,它将呈现一个默认的静态页面。

如何在 Rails 4 中实现这一点?

我是否必须指定额外的管理员路由,或者我可以执行以下操作...?

class PagesController < ApplicationController

  def home
    if logged_in
      render #admin_home
    else
      render #home
    end
  end

  def about
    if logged_in
      render #admin_about
    else
      render #about
    end
  end

  def contact
    if logged_in
      render #admin_contact
    else
      render #contact
    end
  end
end

只有以下路线...

Rails.application.routes.draw do
  root 'pages#home'
  get '/home' => 'pages#home'
  get '/about' => 'pages#about'
  get '/contact' => 'pages#contact'

  get '/signup' => 'users#new'
  post '/users' => 'users#create'

  get '/login' => 'sessions#new'
  post '/login' => 'sessions#create'
  get '/logout' => 'sessions#destroy'
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routes views rails-routing


    【解决方案1】:

    你完全可以这样做:

    if logged_in?
      render  'admin/index'
    else
      render 'index'
    end
    

    但我在 Rails 中看到的约定是为控制器和视图提供一个管理命名空间。如果您使用的是 Devise,looks like 您可以像这样编写已登录的路由:

    authenticated do
      get '/home' => 'admin/pages#home'
    end
    

    当然,这意味着您必须为未登录的用户指定相同的路由。但是,如果您需要加载不同的数据,您将拥有一个单独的控制器(在 contorllers/admin 中的 AdminPagesController)和管理员操作。然后视图将进入views/admin/。

    【讨论】:

    • 太棒了!您的第一个建议效果很好。我也很感谢你提到更流行的约定;我现在正在研究名称间距。谢谢!
    【解决方案2】:

    答案是否定的。渲染只渲染一个特定的页面,它不会调用任何新的路由。这就是redirect_to 所做的:它调用了一条全新的路线。您可以为应用程序中的任何视图调用 render,只要您拥有正确的实例变量以使其正确显示即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 2011-07-27
      • 1970-01-01
      • 2014-01-08
      相关资源
      最近更新 更多