ruby-on-rails – Rails 3 – yield return或callback不会在视图中调用<%= yield(:sidebar)||渲染('shared / sidebar')%>

我正在将一个网站从Rails 2(最新)迁移到Rails 3(beta2).
使用 Ruby 1.9.1p378和 Ruby 1.9.2dev进行测试(2010-04-05 trunk 27225)

陷入困境,我不知道哪一部分会运作良好.怀疑产量是问题,但不确切知道.

在我的布局文件中,我经常使用以下技术:

应用程序/视图/布局/ application.html.erb:

<%= yield(:sidebar) || render('shared/sidebar') %>

例如,局部看起来像:

应用程序/视图/共享/ _sidebar.html.erb:

<p>Default sidebar Content. Bla Bla</p>

现在是关键部分的时候了!
在任何视图中,我想创建一个content_for块(可选).这可能包含一些HTML等示例.如果设置了此块,则应在application.html.erb中呈现内部的pice HTML.
如果没有,Rails应该在右侧的shared / _sidebar.html.erb上呈现Partial.

应用程序/视图/书籍/ index.html.erb:

<% content_for :sidebar do %>
    <strong>You have to read REWORK,a book from 37signals!</strong>
<% end %>

所以你有了主意.希望.这种技术在任何Rails 2.x应用程序中都运行良好.
现在,在Rails 3(beta2)中,只有yield部分正在工作.

|| render('shared/sidebar')

或侧面不会通过铁轨或ruby处理.

感谢您的投入和时间!

解决方法

来自railscasts.com的Ryan Bates在Episode #227 – Upgrading to Rails 3 Part 3中展示了一个带有content_for?()的解决方案(视频播放时间为2:45 Min)

我想,这就是我们应该使用它的方式:

content_for?(:sidebar) ? yield(:sidebar) : render("shared/sidebar")

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...