我想根据实际模板定义content_for(:an__area)
在布局级别做一个条件渲染,任何想法如何完成这个任务?Rails检查是否yield:区域在content_for中定义
84
A
回答
193
@content_for_whatever
已被弃用。 使用content_for?
代替,就像这样:
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
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
+0
呵呵,我喜欢你的自答回答,但是......小问题,`instance_variable_defined?(content_var_name)`有点整洁,而不是测试是否它是零。第二大点,content_for实例变量已弃用,因此您的解决方案不适用于未来验证 – 2009-01-23 22:51:17
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 %>
10
不是真的有必要创建一个辅助方法:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
然后当然在你看来:
<% content_for :sidebar do %>
...
<% end %>
我用这一切的时候,以一列,两列的布局
1
我不知道的呼叫产量两倍的性能影响之间有条件去,但是这会做,无论内部的实现产量(@content_for_xyz是不建议使用),没有任何额外的代码或辅助方法:
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
2
<%if content_for?(:content)%>
<%= yield(:content) %>
<%end%>
相关问题
- 1. 检查坐标是否在预定义的区域内
- 2. Rails 3:yield/content_for有一些默认值?
- 3. 检查坐标是否在区域内
- 4. 有没有办法在GRAILS中执行rails“yield/content_for”?
- 5. 检查是否鼠标被点击了在特定区域
- 6. 检查是否在特定区域的按钮
- 7. 检查是否定义宏
- 8. Rails - 如何检测content_for内容是否提供?
- 9. 检查特定区域上是否有精灵 - AndEngine
- 10. Rails:使用“content_for”后布局内相应的“yield”
- 11. content_for&yield没有返回任何内容
- 12. 检查标记是否在当前可见区域
- 13. 如何检查UIImageView是否在UIScrollView的可见区域之外?
- 14. openstreetmap:检查latlong是否在多边形之外(区域)
- 15. android-如何检查位置是否在特殊区域?
- 16. 如何检查元素是否在溢出区域?
- 17. 确定CGPoint是否在图像区域
- 18. Rails global content_for
- 19. Rails 3 content_for issues
- 20. rails content_for not shown
- 21. 如何检查线或点是在区域内还是在区域外
- 22. JavaScript检查属性是否定义
- 23. C#检查变量是否定义
- 24. Yii2检查包是否被定义
- 25. C++检查typedef是否已定义
- 26. 如何检查课程是否定义?
- 27. 检查是否复选框定义
- 28. 我无法检查是否未定义
- 29. 如何检查变量是否定义?
- 30. RequireJS - 检查路径是否定义
看到我的【答案】(http://stackoverflow.com/questions/3347322/yield-if-content-render-something-otherwise-rails-3/7409626#7409626)创建一个帮助器方法来将这种行为封装在Rails 3中。 – tristanm 2011-09-13 23:19:30