我有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
爲什麼這比在控制器中使用佈局方法更好?對於可能會看到此代碼的其他開發人員來說,這種干擾更少,代碼更多並且不太容易理解。 –