使用 image_tag 显示通过 CarrierWave 上传的图像
Posted
技术标签:
【中文标题】使用 image_tag 显示通过 CarrierWave 上传的图像【英文标题】:Displaying an image uploaded with CarrierWave using image_tag 【发布时间】:2020-05-20 18:43:17 【问题描述】:我正在尝试使用carrierwave gem 将图片上传到我的rails 应用程序,但不知道如何使用image_tag 帮助程序显示照片。我实际上不确定照片是否正在上传,因为我收到了 .image_url 的 NoMethodError。照片模型属于地点模型。
<%= simple_form_for @photo, url: place_photos_path(@place) do |f| %>
<%= f.input :caption %>
<%= f.input :picture %>
<%= f.submit "Add a photo", class: 'btn btn-primary' %>
<% end %>
<% if @place.photos.any? %>
<% @place.photos.each do |photo| %>
<%= photo.caption%>
<%= image_tag photo.image_url.to_s if photo.image_url.present? %>
<% end %>
<% end %>
class Photo < ApplicationRecord
belongs_to :user
belongs_to :place
mount_uploader :picture, PictureUploader
end
class PictureUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#model.class.to_s.underscore/#mounted_as/#model.id"
end
class Place < ApplicationRecord
belongs_to :user
has_many :comments
has_many :photos
geocoded_by :address
after_validation :geocode
validates :name, presence: true
validates :address, presence: true
validates :description, presence: true
end
end
【问题讨论】:
【参考方案1】:如果您发布您的模型和上传器代码,这将更容易追查问题:
我相信您使用的是carrierwave文档中指定的代码:
class Photo < ActiveRecord::Base
mount_uploader :picture, ImageUploader
end
那么你所要做的就是使用这个:
<%= image_tag photo.picture.url, class: 'class-name' %>
有关上传者的更多信息,请阅读此处https://github.com/carrierwaveuploader/carrierwave#getting-started
【讨论】:
我在上面添加了我的模型。使用 给了我一个 NoMethodError for .picture 使用此代码并确保图片实际上正在上传,这意味着它在控制台中没有给出任何错误:use('photo' not 'Photo') 使用github.com/trusche/httplog gem 在控制台中记录你的http请求。【参考方案2】:在你的picture_uploader.rb中
class PictureUploader < CarrierWave::Uploader::Base
#uncomment this line
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#model.class.to_s.underscore/#mounted_as/#model.id"
end
end
【讨论】:
以上是关于使用 image_tag 显示通过 CarrierWave 上传的图像的主要内容,如果未能解决你的问题,请参考以下文章
如何将类添加到 image_tag rails helper