我在视图中得到以下代码:
<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>
我做错了什么?
答案 0 :(得分:1)
在看到您的代码后我发现,您在调用辅助方法时没有传递photo_ids
参数。
<%= photos_thumbs_by_ids(photo_ids) %>
由于没有找到照片的ID,因此它返回零项,因此不会创建<li>
个项目。
答案 1 :(得分: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
答案 2 :(得分:1)
问题是每个:
Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
...
end
它返回一个数组,而不是字符串。尝试使用&#39; map&#39;来收集它。并加入
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。