partial_for vs partials中的yield

Wil*_* E. 9 haml ruby-on-rails ruby-on-rails-3

在带有HAML(3.1.4)的rails 3.0中,我有

  1. 一些类似模板的部分,如_template.html.haml:

    .panel.top
      = yield :panel_top
    
    .content
      = yield
    
    Run Code Online (Sandbox Code Playgroud)
  2. 另一个部分将使用prev模板显示(所有这些东西都是使用AJAX渲染的,但这没关系)

    - content_for :panel_top do
     .title.left
       = title
    
    content text
    
    Run Code Online (Sandbox Code Playgroud)

这就像Rails 3.0中的魅力一样

但是,升级到3.2后这个失败了!Yiels只是产生"内容文本",所以我有两次"内容文本",根本没有标题

只有改变= yield :panel_top= content_for :panel_top作品为3.2

我不确定这个解决方案是否正常,如果它是稳定的或推荐的,我找不到任何关于yield处理和Rails 3.1发行说明中的变化的注释,也没有找到3.2中的注释.

你能帮助组织yield内部部分的最佳方法吗?

Wil*_* E. 10

从Rails 3.0到Rails 3.2 content_for真的改变了:

3.0:

def content_for(name, content = nil, &block)
    content = capture(&block) if block_given?
    @_content_for[name] << content if content
    @_content_for[name] unless content
end
Run Code Online (Sandbox Code Playgroud)

3.2:

def content_for(name, content = nil, &block)
  if content || block_given?
    content = capture(&block) if block_given?
    @view_flow.append(name, content) if content
    nil
  else
    @view_flow.get(name)
  end
end
Run Code Online (Sandbox Code Playgroud)

这向我们展示了3.2 content_for作品中用于显示/插入内容的作品,不仅将其存储为命名部分.

此外,如果您尝试调试yield逻辑,那么在content_for正确初始化之前它会产生它.

因此,将片段缓存保留在讨论之外我可以得出结论,除了顶级布局之外,在任何地方插入命名部分content_for都是可取的.在帮助者和其他情况下yield应该呈现错误的结果.