Home Rails loop thru attachments and show the first

# Rails loop thru attachments and show the first

Theopap
1#
Theopap Published in 2017-11-12 14:30:39Z
 I have implemented a basic search and I would like to show each result aligned with an image. I'm using the carrierwave gem on my app and trying loop thru attachments in order to show only the first one as thumbnail. 
<% if @items.present? %> <% @items.each do |item| %> <% item.attachments.each do |attachment| %> <%= image_tag attachment.url(:mini).first unless attachment.blank? %> <% end %> <% end %> <% end %>
create_table "items", force: :cascade do |t| t.string "title" t.string "description" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.json "attachments" end  But unfortunately the image does not show, no errors etheir just a blank thumbnail. Any ideas how to implement this?
moveson
2#
 In your answer, you iterate over attachments and add an index to the iteration. But the only purpose of the iteration is to choose an attachment whose index == 0. A much easier way to express the same thing is just to retrieve the attachment at index 0 directly using attachments[0]. To be more Ruby-idiomatic, we can use attachments.first. So we can do away with the inner iteration entirely. All we need is to check if @items is present, then iterate over items, pick the first attachment of each, and retrieve the url. Here's a simplified version: <% if @items.present? %> <% @items.each do |item|%> <%= image_tag item.attachments.first.url(:mini) %> <% end %> <% end %>  Note that this will fail (your code will too) if any item has no attachments. You may want to guard against this by using Ruby's safe-navigation operator (which works in Ruby 2.3+). You can replace the third line with this:  <%= image_tag item.attachments.first&.url(:mini) %> # This prevents error if .first return nil ^