2列のレイアウトがあります。一部のコントローラーは列を残しましたが、そうでないものもあります。コントローラに依存してレンダリングするための最良の方法は何ですか?今、それはそのように見えます:
<% if params[:controller] != 'page' %>
<div id="navigation" class="l"><%= render "layouts/left-menu" %></div>
<% end %>
それは悪い、悪い猿のコードです。
2列のレイアウトがあります。一部のコントローラーは列を残しましたが、そうでないものもあります。コントローラに依存してレンダリングするための最良の方法は何ですか?今、それはそのように見えます:
<% 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これで、アクション内またはアクションの他の場所で左メニューを無効/有効にすることができます:
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 フォルダーに left-menu.html.erb を置きます。
特定のcssファイルにstylesheet_link_tagを付けて
<%= stylesheet_link_tag 'left-menu' %>
Railsガイドで詳細を学ぶことができます