0

2列のレイアウトがあります。一部のコントローラーは列を残しましたが、そうでないものもあります。コントローラに依存してレンダリングするための最良の方法は何ですか?今、それはそのように見えます:

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

それは悪い、悪い猿のコードです。

4

2 に答える 2

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
于 2013-01-17T23:23:31.330 に答える
1

コントローラーでは、このようなレイアウトを使用します

#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ガイドで詳細を学ぶことができます

于 2013-01-17T21:43:22.587 に答える