【问题标题】:Displaying an image uploaded with CarrierWave using image_tag使用 image_tag 显示通过 CarrierWave 上传的图像
【发布时间】: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

【问题讨论】:

    标签: html ruby-on-rails image image-uploading carrierwave


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      相关资源
      最近更新 更多