我迷失在某个地方,因为我建立了具有活动存储空间的画廊,而且还可以看到图像并上传图像
但是有一个问题,当我尝试为列表页面创建新页面时,我试图在缩略图页面上获取图像
<div class="row">
<div class="col-md-3">
<ul class="sidebar-list">
<li class="sidebar-item"><%= link_to "Your tools Listings", tools_path, class: "sidebar-link active" %></li>
</ul>
</div>
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-heading">
Listings
</div>
<div class="panel-body">
<% @tools.each do |tool| %>
<div class="row">
<div class="col-md-2">
<%= tool.images %>
</div>
<div class="col-md-7">
<h4><%= tool.listing_name %></h4>
</div>
<div class="col-md-3 right">
<%= link_to "Update", listing_tool_path(tool), class: "btn btn-black-free-account" %>
</div>
</div>
<hr/>
<% end %>
</div>
</div>
</div>
</div>
应该可以,只要它显示基于文本的图像,请参见下面的屏幕截图
所以我需要更改这些图像,因为我使用的是与第一个屏幕截图相同的方法,如下代码所示
<% if @tool.images.attached? %>
<div class="panel panel-default">
<div class="panel-heading">
Photo Display
</div>
<br>
<div class="row">
<% @tool.images.each do |image| %>
<div class="col-md-4">
<div class="panel panel-default tools-gallery-panel">
<div class="panel-heading preview ">
<%= link_to image_tag(image, class:"img-thumbnail tools-gallery"), image %>
</div>
<div class="panel-body">
<span class="pull-right">
<i class="fa fa-trash-o fa-lg" aria-hidden="true"></i>
<%= link_to "Remove", delete_image_attachment_tool_path(image), method: :delete, data: {confirm: "Are you sure?"} %>
</span>
</div>
</div>
</div>
<% end %>
<% end %>
</div>
所以我复制了
<%= link_to image_tag(image, class:"img-thumbnail tools-gallery"), image %>
这到新的列表页面的东西
所以我修改了列表页面
<% @tools.each do |tool| %>
<div class="row">
<div class="col-md-2">
<%= tool.images %>
<%= link_to image_tag(tool.images, class:"thumbnail"), images %>
</div>
<div class="col-md-7">
<h4><%= tool.listing_name %></h4>
</div>
<div class="col-md-3 right">
<%= link_to "Update", listing_tool_path(tool), class: "btn btn-black-free-account" %>
</div>
</div>
<hr/>
<% end %>
即使我尝试过
<%= link_to image_tag(tool, class:"thumbnail"), images %>
Tool.rb
class Tool < ApplicationRecord
belongs_to :user
has_many_attached :images
validates :tool_type, presence: true
validates :power_type, presence: true
validates :accessories, presence: true
validates :brand, presence: true
validates :price, presence: true
end
我也遇到同样的错误,任何建议都很好
答案 0 :(得分:1)
这是link_to
的API:
link_to name, options = {}, html_options = nil
这是image_tag
的API:
image_tag source, options={}
最后,您看到此错误:
Can't resolve image into URL: undefined `to_model` for #<ActiveStorage::Attached::Many>
您收到此错误,是因为您尝试使用单个图像而不是“许多”的集合来创建图像标签。
看看您原来的工作代码(剥去了多余的HTML):
<% @tool.images.each do |image| %>
<%= link_to image_tag(image, class:"img-thumbnail tools-gallery"), image %>
<% end %>
注意您如何遍历所有图像?这是因为@tool
具有许多图像。它是图像的阵列。在link_to
块中,您以单个图像作为参考正确定义了image_tag
。现在,让我们看看您的错误代码:
<% @tools.each do |tool| %>
<%= tool.images %>
<%= image_tag(tool.images, class:"thumbnail"), images %>
<% end %>
这很奇怪。您是这样称呼的:
<%= tool.images %>
其中仅显示#<ActiveStorage::Attached::Many>
的一个实例,您在调用它:
<%= link_to image_tag(tool.images, class:"thumbnail"), images %>
这只是尝试(但失败)将图像数组链接到单个image_tag实例,由于api,我们知道该实例无效。您可能想这样做:
<% @tools.each do |tool| %>
<%= tool.images.each |image| %>
<%= image_tag(image, class:"thumbnail"), image %>
<% end %>
<% end %>
答案 1 :(得分:1)
在您的模型中,您有has_many_attached :images
tool.images
不管图像数量如何总是返回一个ActiveSTorage::Attached::Many
的{{1}},所以您必须循环遍历它才能获取每个Enumerable
每个图像将是一个image
,要使用ActiveStorage::Blob
,您将需要一个图像的URL,以便从要使用image_tag
的Blob中获取该URL。
这里是一个例子:
url_for(image)
在您的情况下,您希望图像是一个链接,这也很容易做到,您只需将正确的信息传递给<% tool.images.each do |image| %>
<%= image_tag(url_for(image), class: 'some-class') %>
<% end %>
。您可以通过多种方式执行此操作,这是我认为最容易阅读的方式。
带有链接:
link_to