我已经实现了基本搜索,我希望将每个结果与图像对齐。
我在我的应用上使用cs:ip
并尝试通过附件循环,以便只显示第一个作为缩略图。
carrierwave gem
但不幸的是图片没有显示,没有错误etheir只是一个空白的缩略图。任何想法如何实现这一点?
答案 0 :(得分:1)
在你的回答中,你迭代attachments
并为迭代添加一个索引。但迭代的唯一目的是选择索引== 0的附件。表达相同内容的一种更简单的方法就是直接使用attachments[0]
检索索引0处的附件。为了更加Ruby-idiomatic,我们可以使用attachments.first
。
所以我们可以完全取消内部迭代。我们所需要的只是检查@items
是否存在,然后迭代items
,选择每个的第一个附件,并检索网址。
这是一个简化版本:
<% if @items.present? %>
<% @items.each do |item|%>
<%= image_tag item.attachments.first.url(:mini) %>
<% end %>
<% end %>
请注意,如果任何项目没有附件,这将失败(您的代码也将失败)。您可能希望通过使用Ruby的安全导航操作符(适用于Ruby 2.3+)来防范这种情况。您可以用以下内容替换第三行:
<%= image_tag item.attachments.first&.url(:mini) %>
# This prevents error if `.first` return nil ^