我有以下助手方法:

def tile_for( photo, tileClass = nil )
    div_for( photo, :class => tileClass ) do
        link_to( image_tag( photo.image_url(:sixth) ), photo )
        content_tag( :div, photo.location(:min), :class => 'caption' )
    end
end

问题是,它返回这种输出:
<div id="photo_25" class="photo">
    <div class="caption" style="display: none;">Berlin</div>
</div>

正如您所看到的,link_to没有被输出。我想这是因为只包含了块的返回值,而不是每个执行的行?我真的不明白为什么这种代码在视图中工作得很好,但在helper方法中却完全不一样。有谁能告诉我发生了什么事,为什么会这样?如何构建这样的循环帮助器方法?

最佳答案

它在视图中工作,因为erb实际上只是一个大型连接引擎。您需要在助手中“手动”执行此操作,因为ERB不会解释代码:

def tile_for( photo, tileClass = nil )
  div_for( photo, :class => tileClass ) do
    link_to(image_tag( photo.image_url(:sixth)), photo)
    + # <- Add this so the block returns the whole string
    content_tag(:div, photo.location(:min), :class => 'caption')
   end
end

div_for还支持数组,数组将被收集到一个连续字符串中。所以你也可以这样做:
  [link_to(image_tag(photo.image_url(:sixth)), photo),
   content_tag(:div, photo.location(:min), :class => 'caption')]

07-28 08:58