【问题标题】:Conditional Rendering of partial in RailsRails 中的局部条件渲染
【发布时间】:2013-03-06 04:52:52
【问题描述】:

我有控制器:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    您的视图中有一个名为 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 中的辅助方法中,以干燥您的视图

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多