我有2列布局。有些控制器已经离开列,有些没有。渲染它的最佳方式取决于控制器是什么?现在,它看起来很喜欢:在Ruby on Rails的条件下渲染部分模板
<% if params[:controller] != 'page' %>
<div id="navigation" class="l"><%= render "layouts/left-menu" %></div>
<% end %>
这是坏的,坏的猴子代码。
我有2列布局。有些控制器已经离开列,有些没有。渲染它的最佳方式取决于控制器是什么?现在,它看起来很喜欢:在Ruby on Rails的条件下渲染部分模板
<% if params[:controller] != 'page' %>
<div id="navigation" class="l"><%= render "layouts/left-menu" %></div>
<% end %>
这是坏的,坏的猴子代码。
编辑:更改我的解决方案,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
或acti的其他任何地方禁用/启用左侧菜单上:
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
在你的控制器使用的布局像这样
#PublicController is just an example
class PublicController < ApplicationController
layout "left-menu"
end
而且在views/Layouts文件夹你把左边的menu.html.erb
与stylesheet_link_tag您spesific css文件
<%= stylesheet_link_tag 'left-menu' %>
您可以了解更多的rails guides
但我有很多控制器,必须呈现左菜单。我必须为每个控制器添加布局? – Meliborn
views/layouts中的文件application.html.erb是默认值。如果你想让你的控制器使用这种布局,你不需要这条线。如果你需要控制器的另一种布局,这是轨道办法。所有其他解决方案都是猴子补丁,并且打破了常规配置中的铁轨角色。 :) –
有趣的解决方案。 – Meliborn
但是如果我需要按行动划分? – Meliborn
为什么这比在控制器中使用布局方法更好?对于可能会看到此代码的其他开发人员来说,这种干扰更少,代码更多并且不太容易理解。 –