実際のテンプレートが定義したものに基づいて、レイアウト レベルで条件付きレンダリングを実行したいのですが、content_for(:an__area)
これを行う方法はありますか?
goodwill
質問する
36235 次
6 に答える
224
@content_for_whatever
廃止されました。content_for?
代わりに、次のように使用します。
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
于 2010-03-11T22:05:59.870 に答える
3
<%if content_for?(:content)%>
<%= yield(:content) %>
<%end%>
于 2014-02-18T16:49:28.580 に答える
2
ヘルパーを作成できます:
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
これをレイアウトで使用します。
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
于 2009-03-11T20:28:14.453 に答える
1
誰も答えていないので、私は恥知らずに自己応答を行います。私はすでに答えを見つけています:) application_helper.rbまたは便利な場所で、これをヘルパーメソッドとして定義します。
def content_defined?(symbol)
content_var_name="@content_for_" +
if symbol.kind_of? Symbol
symbol.to_s
elsif symbol.kind_of? String
symbol
else
raise "Parameter symbol must be string or symbol"
end
!instance_variable_get(content_var_name).nil?
end
于 2008-10-11T16:01:17.763 に答える
1
yield を 2 回呼び出すことによるパフォーマンスへの影響についてはよくわかりませんが、yield の内部実装 (@content_for_xyz は非推奨) に関係なく、追加のコードやヘルパー メソッドを使用しなくても実行できます。
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
于 2009-11-16T12:01:49.347 に答える