【问题标题】:Actionview - Render outputs plain array of objects instead of HTMLActionview - 渲染输出纯对象数组而不是 HTML
【发布时间】:2014-02-21 03:47:42
【问题描述】:

我有一个 Rails 的 actionview 部分,它遍历层次结构中的对象 - 分支对象(模拟数组)包含叶子或分支对象等。对于每个分支对象,我有以下代码的部分:

branch.each do |child|
  render partial: child.class.to_s.underscore, object: child, layout: child.layout
end

输出是字面意思:

[#<LeafObject:0x007fbf6806f480 @id="obj1">, #<LeafObject:0x007fbf700c80c8 @id="obj2">]

考虑到这些叶子对象的部分包含&lt;%= leaf_object.id %&gt;&lt;br /&gt;,我希望得到以下输出:

obj1<br />obj2<br />

这就是它变得奇怪的地方。如果我直接在分支数组中的对象上调用render,它会起作用,但只有当我单独执行时。似乎第一个对象的缓冲区被第二个对象覆盖了。

render partial: branch[0].class.to_s.underscore, object: branch[0], layout: branch[0].layout
render partial: branch[1].class.to_s.underscore, object: branch[1], layout: branch[1].layout

生产...

obj2<br />

是的,我知道:WTF!?!就像渲染在枚举器中的行为会有所不同。

另外,请记住,我没有使用集合,因为每个对象的布局都会发生变化(即分支 [0].layout)。使用集合有效,但不适用于每个对象布局。

知道我做错了什么吗?多次调用渲染是一件坏事吗?任何虽然将不胜感激。

版本:Ruby:1.9.3,Rails:3.2.10

【问题讨论】:

    标签: ruby-on-rails ruby actionview


    【解决方案1】:

    只是检查,但你是否遗漏了一些 ERB 标签?

    <% branch.each do |child| %>
      <%= render partial: child.class.to_s.underscore, object: child, layout: child.layout %>
    <% end %>
    

    因为你的输出不正确:

    [#<LeafObject:0x007fbf6806f480 @id="obj1">, #<LeafObject:0x007fbf700c80c8 @id="obj2">]
    

    表明您实际上正在做类似的事情:

    <%= branch %>
    

    【讨论】:

    • branch.each 循环在帮助器中,但我会仔细检查类似 的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2018-04-22
    • 2023-01-13
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多