Rails HTML 辅助方法

6
我正在尝试找出一种最干净的方法来生成一些HTML并将内容嵌套在其中。使用HAML。基本上我想做这样的事情:
= block_large
  This is some nested content

那应该生成:

<div class="block large">
  <img src="block_large_carat.gif" class="block_large_carat">
  This is some nested content
</div>

问题是我不知道如何实现这一点。部分视图?帮助程序?我被卡在了如何嵌套任何想要的内容上。试图保持我的HAML干燥,不想一遍又一遍地明确声明图像标记。


部分视图是前进的正确方式。 - jtbandes
好的,但是如何在partial中嵌套内容呢?我是Rails新手=P - devth
你不能将块传递给partials。helper是更好的选择。但我现在没有时间发布一个例子。 - EmFi
1个回答

5

编辑:
我的之前的解决方案不起作用 :)
感谢EmFi指出这一点。
这次我甚至进行了测试,它甚至起作用了!\o/

我在这里发布这篇文章,基于这篇博客文章
阅读完整的文章可以获得更好的解释 :)

app/helpers/application_helper.rb

  def block_to_partial(partial_name, options = {}, &block)
    options.merge!(:body => capture(&block))
    concat(render(:partial => partial_name, :locals => options), block.binding)
  end

app/views/xxx/new.html.haml

%h2 Test!
- block_to_partial("block_large", :class_name=>"nested_content") do
  This is some nested content
OOps..

app/views/xxx/_block_large.html.haml

#block_large
  %img(src="block_large_carat.gif" class="block_large_carat")
  %div(class=class_name)
    = body

渲染:

<div id='block_large'>
  <img class='block_large_carat' src='block_large_carat.gif' />
  <div class='nested_content'>
    This is some nested content
  </div>
</div>
OOps..

希望这可以帮到您!

不好。传递给渲染的代码块只能使用 render :update 进行处理。 - EmFi
真的。(我感到羞愧)正在修复它。 - Carlos Lima
谢谢您的回答。我还没有机会尝试,但听起来很有道理 :) - devth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接