Rails循环遍历附件并显示第一个

时间:2017-11-12 14:30:39

标签: ruby-on-rails ruby ruby-on-rails-4 carrierwave

我已经实现了基本搜索,我希望将每个结果与图像对齐。 我在我的应用上使用cs:ip并尝试通过附件循环,以便只显示第一个作为缩略图。

carrierwave gem

但不幸的是图片没有显示,没有错误etheir只是一个空白的缩略图。任何想法如何实现这一点?

1 个答案:

答案 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 ^