2

我有控制器:

class PagesController < ApplicationController
  protect_from_forgery
  layout "pages"

  def index
  end

  def products
  end

  def company
    @enable_sub_menu = true
  end

  def support
  end

  def login
  end
end

路线文件:

App::Application.routes.draw do

  root :to => 'pages#index'

  ##Product / Search Routing
  match "products" => "pages#products"
  match "products/search" => 'pages#products/search'
  match "products/search/pricing" => 'pages#products/search/pricing'
  match "products/business/pricing" => 'pages#products/business/pricing'
  match "products/business" => 'pages#products/business'


  ##Company Pages Routing
  match "company/team" => 'pages#company/team'
  match "company/contact" => 'pages#company/contact'
  match "company" => 'pages#company'
  match "company/friends" => 'pages#company/friends'

  ##Support Routes
  match "support" => 'pages#suppprt'


  ##Login Routes
  match "login" => 'pages#login'
end

我想要做的是在任何页面上,/company我想渲染一个部分但没有其他人这样做我正在使用这个

<%= render :partial => "pages/partials/sub_nav"  if @enable_sub_menu %>

它查看控制器方法并检查它是否应该加载 sub_nav 部分

它适用于/company但不适用于子页面,/company例如/company/team

如何启用它以加载控制器中方法公司的所有子页面?

4

1 回答 1

4

您的视图中有一个辅助方法,称为controller_name ActionController::Metal

这可能允许您根据您所在的控制器触发部分。

<%= render :partial => "pages/partials/sub_nav"  if controller_name == "company" %>

请注意,还有一个名为action_name的助手,它也允许您检查当前操作。所以你可以把它们结合起来。

<%= render :partial => "pages/partials/sub_nav"  if controller_name == "company" || action_name == "company %>

当然,您可能希望将此 if 语句滚动到 ApplicationHelper 中的辅助方法中以干燥您的视图

于 2013-03-05T20:52:52.520 回答