0

私はさまざまな Web ページを持っていますが、ほとんどのページは 6 つまたは 7 つのページ カテゴリのうちの 1 つに分類されます。これらの Web ページのカテゴリごとに、背景色や画像が異なるなど、ルック アンド フィールが少し異なります。私は次のものを持っていますviews/layout/application.html.erb

<header class="sub<% if content_for?(:page_type) %> <%= yield(:page_type) %><% end %>">

そして、すべての単一のビューで、私は持っています:

<% content_for :page_type, 'information' %>

しかし、すべてのウェブページに対してそれを行うのは本当に面倒で、物事を変更したいときは、これらをいじる必要があります (私はたくさんのページを持っています)。そのため、代わりに変数を使用することを考えています:

<header class="sub<%= @page_type ? ' ' + @page_type : '' %>">

ビューの場合:

<% @page_type = 'information' %>

利点はbefore_filter :set_page_type、コントローラーで a を実行し、それが制御するすべてのビューに対してページ タイプを 1 回設定できることです (大きな助けになります)。

おそらく、私にとって最善の方法は、URL の最初のフォルダーを Web ページのカテゴリとして使用することです。URL を再構成する必要がありますが、とにかくそうするのが理にかなっています。そのままにしておく必要があるトップレベルのページがいくつかあります。

これはかなり一般的な状況でなければなりません。ほとんどのページを分類し、その分類をレイアウトで使用する最良の方法は何ですか?

4

1 に答える 1

1

私は通常、ボディクラスのヘルパーを使用しています—次のようなものです。

def body_class(c = nil)
  @body_class ||= [controller.controller_name]
  @body_class << c
  @body_class.flatten.compact.uniq.join(" ")
end

これには、デフォルトでコントローラー名が含まれます(アクションなども含めることができます。次に、必要に応じて、ビューでこのヘルパーを呼び出します。

<% body_class "bar" %>

ヘルパーは常にクラス文字列を返すため、レイアウト内で同じヘルパーを呼び出すことができます(私はbodyタグを使用します)。おそらく引数はありません。

<body class="<%= body_class %>">

FoosControllerこれは、前の例で次のように呼ばれるコントローラーに対してレンダリングされます。

<body class="foos bar">

たとえば、アプリケーションコントローラでヘルパーを定義し、を使用してビューで使用できるようにすると、helper_methodこれで目的の処理が実行されるはずです。

于 2012-11-06T21:14:19.470 に答える