Rails 遍历附件并显示第一个
Rails loop thru attachments and show the first
我已经实现了基本搜索,我想显示每个结果都与图像对齐。
我在我的应用程序上使用 carrierwave gem
并尝试循环浏览附件,以便仅将第一个显示为缩略图。
<div class="container">
<div class="img-thumbnail" style="display: inline-block;">
<% if @items.present? %>
<% @items.each do |item| %>
<% item.attachments.each do |attachment| %>
<%= image_tag attachment.url(:mini).first unless attachment.blank? %>
<% end %>
<% end %>
<% end %>
</div>
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
但不幸的是图像没有显示,没有错误,只是一个空白的缩略图。任何想法如何实现这个?
在您的回答中,您迭代 attachments
并向迭代添加索引。但是迭代的唯一目的是选择索引 == 0 的附件。表达相同内容的更简单的方法是直接使用 attachments[0]
检索索引 0 处的附件。为了更 Ruby-地道,我们可以使用 attachments.first
.
因此我们可以完全取消内部迭代。我们只需要检查 @items
是否存在,然后遍历 items
,选择每个附件的第一个附件,然后检索 url.
这是一个简化版本:
<% 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 ^
我已经实现了基本搜索,我想显示每个结果都与图像对齐。
我在我的应用程序上使用 carrierwave gem
并尝试循环浏览附件,以便仅将第一个显示为缩略图。
<div class="container">
<div class="img-thumbnail" style="display: inline-block;">
<% if @items.present? %>
<% @items.each do |item| %>
<% item.attachments.each do |attachment| %>
<%= image_tag attachment.url(:mini).first unless attachment.blank? %>
<% end %>
<% end %>
<% end %>
</div>
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
但不幸的是图像没有显示,没有错误,只是一个空白的缩略图。任何想法如何实现这个?
在您的回答中,您迭代 attachments
并向迭代添加索引。但是迭代的唯一目的是选择索引 == 0 的附件。表达相同内容的更简单的方法是直接使用 attachments[0]
检索索引 0 处的附件。为了更 Ruby-地道,我们可以使用 attachments.first
.
因此我们可以完全取消内部迭代。我们只需要检查 @items
是否存在,然后遍历 items
,选择每个附件的第一个附件,然后检索 url.
这是一个简化版本:
<% 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 ^