在Ruby on Rails中基于条件渲染部分模板

时间:2013-01-17 21:38:42

标签: ruby-on-rails ruby partial-views

我有2列布局。有些控制器已离开列,有些则没有。渲染它的最佳方法是什么依赖于控制器?现在,它看起来像是:

<% if params[:controller] != 'page' %>
        <div id="navigation" class="l"><%= render "layouts/left-menu" %></div>
    <% end  %>

这是糟糕的,糟糕的猴子代码。

2 个答案:

答案 0 :(得分:2)

编辑:更改了我的解决方案,OP希望条件依赖于操作控制器。

在你的基础助手中,定义一个这样的方法:

# app/helpers/application_helper.rb
module ApplicationHelper
  def has_left_menu?
    @has_left_menu.nil? ? 
      true : # <= default, change to preference
      @has_left_menu
  end
end

在您的应用程序控制器中:

# app/controllers/application_controller.rb
class ApplicationController
  def enable_left_menu!
    @has_left_menu = true
  end
  def disable_left_menu!
    @has_left_menu = false
  end
end

在您的视图或布局中,将支票更改为:

<% if has_left_menu? %>
    <div id="navigation" class="l"><%= render "layouts/left-menu" %></div>
<% end  %>

现在,您可以在before_filters或操作中的任何其他位置停用/启用左侧菜单:

class UsersController < ApplicationController
  # enable left menu for "index" action in this controller
  before_filter :enable_left_menu!, :only => [:index]

  # disable left menu for all actions in this controller
  before_filter :disable_left_menu!

  def index
    # dynamic left menu status based on some logic
    disable_left_menu! if params[:left_menu] == 'false'
  end
end

答案 1 :(得分:1)

在你的控制器中你使用这样的布局

#PublicController is just an example
class PublicController < ApplicationController
  layout "left-menu"
end

在views / layouts文件夹中,您输入了left-menu.html.erb

使用stylesheet_link_tag到你的特定css文件

<%= stylesheet_link_tag 'left-menu' %>

您可以在rails guides

了解详情