0

在我看来,我得到了以下代码:

<ul class="thumbnails">
  <% Photo.find_all_by_id(my_params, limit: 10).each do |p| %>
    <li class="thumbnail">
      <%= image_tag(p.url(:fb)) %>
    </li>
  <% end %>
</ul>

它呈现带有缩略图的无序列表。它工作正常 - 我看到带有图像的列表:

<ul class="thumbnails">
  <li class="thumbnail">
    <img alt="bmw" src="/assets/.../bmw.jpg?1364218949">
  </li>
</ul>

我想把它放到助手中,像这样:

module PhotosHelper
  def photos_thumbs_by_ids(photos_ids)
    content_tag :ul, :class => "thumbnails" do
      Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
        content_tag :li, :class => "thumbnail" do
          image_tag(p.url(:fb))
        end
      end
    end
  end
end

但是当我<%= photos_thumbs_by_ids my_params %>在我的视图中使用时,它只呈现:

<ul class="thumbnails"></ul>

我究竟做错了什么?

4

3 回答 3

1

看到您的代码后我发现,您photo_ids在调用辅助方法时没有传递参数。

<%= photos_thumbs_by_ids(photo_ids) %>

由于没有 ids 来查找照片,所以它返回零个项目,因此不会<li>创建任何项目。

于 2013-03-26T08:37:23.593 回答
1

尝试如下;

<%= photos_thumbs_by_ids(photo_ids) %>

def photos_thumbs_by_ids(photos_ids)
    content_tag :ul, :class => "thumbnails" do
      Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
        content_tag :li, :class => "thumbnail" do
          concat(image_tag(p.url(:fb)))
        end
      end
    end
  end
于 2013-03-26T08:38:03.780 回答
1

问题是每个:

Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
...
end

它返回一个数组,而不是字符串。尝试用“地图”收集它并加入

module PhotosHelper
  def photos_thumbs_by_ids(photos_ids)
    content_tag :ul, :class => "thumbnails" do
      Photo.find_all_by_id(photos_ids, limit: 10).map { |p|
        content_tag :li, :class => "thumbnail" do
           image_tag(p.url(:fb))
        end
      }.join.html_safe
    end
  end
end

这是因为至少渲染是由有用的方法capture完成的。此方法仅在结果是字符串时才放入输出缓冲区,并且不要尝试 to_s。

于 2013-03-26T08:43:12.697 回答