0

次の小さな問題があります。

レイアウトでは、body タグにいくつかのクラスを設定するためにcontent_forに譲ります。

<body class="<%= yield(:body_classes) %>

content_forと呼びたい

<%= content_for(:body_classes, "one") %>

ここまでは順調ですね。content_forを 2 回目に使用します。

<%= content_for(:body_classes, "two") %>

私のHTMLでは、次のようになります。

<body class="onetwo">

これらの 2 つのクラスをスペースで区切るエレガントな方法はありますか? 私はいくつかのハッキーな解決策を考えることができますが、何も正しく感じません...

どうもありがとう!

4

3 に答える 3

2

content_forこの場合は適切ではないと思います。ただし、いくつかのヘルパー メソッド (私の Rails プロジェクトの 1 つから抜粋) を使用して、問題をエレガントに解決できます。

def klass(*classes)
  @classes = [] if @classes.nil?
  @classes += classes
  @classes.uniq!
  nil
end

def has_klass?(klass)
  !@classes.nil? && @classes.include?(klass)
end

def body_klasses
  @classes.map(&:to_s).join(" ") rescue nil
end

テンプレートでの使用:

<%= klass :one, :two %>
<%= klass :three %>

レイアウトで、特定のクラスが設定されているかどうかを確認します。

<% if has_klass? :one %>

そして最後に...

<body class="<%= body_klasses %>">

ニーズに合わせてこれらをさらにカスタマイズできます。

于 2012-07-10T19:05:13.217 に答える
0

新しいコンテンツを追加する前にスペースを追加するために、:body_clases に何かを追加する前に、既に何かがあるかどうかを確認できます。

<% content_for(:body_classes,content_for?(:body_classes) ? ' one' : 'one') %>
<% content_for(:body_classes,content_for?(:body_classes) ? ' two' : 'two') %>

最終的な Html は次のようになります。

<body class="one two">
于 2012-07-10T09:34:01.770 に答える
0

を設定するたびに、クラスの前 (または後) にスペースを入れるだけですcontent_for

<% content_for(:body_classes, "one ") %>

ところで、=設定タグに を含めたくないでしょう。一般的には、保存しているコンテンツを後で使用するために Rails が HTML に出力することは望ましくありません。

于 2012-07-10T07:53:27.817 に答える