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")

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...