仅基于Paperclip中的URL存储图像

时间:2016-02-28 17:35:16

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems paperclip

我正在使用paperclip在我的rails应用程序中获取个人资料图片上传功能。这适用于将图像上传到个人资料的默认情况,但我希望允许没有图片的用户从选择的一些预先安排的' stock'中选择一个。图像。

这些图片在我的资产图片文件夹中本地托管。因此,在这些情况下,我希望能够在不实际上传图像的情况下将图像添加到我的EventImage对象,而只需在本地路径上引用URL。

我已经尝试过这篇文章中的每一个答案:Save image from URL by paperclip但它们似乎都没有效果。我正在使用回形针版本paperclip (4.3.1 37589f9)

当我尝试解决方案时:

def photo_from_url(url)
    puts "we got:"+url
    Thread.new do
    self.photo = URI.parse(url)
    end
  end

它导致没有存储图像引用,并且无论我传递给该方法的图像的URL如何,它都不会在我执行时显示我的图像:<%= image_tag @event.event_images.first.photo.url %> - 而是显示默认图像图像尚未找到或存储。

我还必须把它放在一个新线程中,否则它会被绑定并阻塞/导致超时,这似乎是URI.parse的一个问题,而且图像最终未能通过验证,因为照片是&#39;空&#39;这在我的验证中是不允许的,所以我最终删除了验证状态行:photo,这仍然无法解决问题。我真的只想要模型回形针方法:照片 - 有时指向本地网址,而其他时候我正常上传文件。

在这里看全班:

# == Schema Information
#
# Table name: event_images
#
#  id                 :integer          not null, primary key
#  caption            :string
#  event_id           :integer
#  created_at         :datetime         not null
#  updated_at         :datetime         not null
#  photo_file_name    :string
#  photo_content_type :string
#  photo_file_size    :integer
#  photo_updated_at   :datetime
#

class EventImage < ActiveRecord::Base
  attr_accessor :PAPERCLIP_STORAGE_OPTS

  has_attached_file :photo , PAPERCLIP_STORAGE_OPTS

  validates_attachment_presence :photo
  validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/gif", "image/png"]
  validates_with AttachmentSizeValidator, :attributes => :photo, :less_than => 3.megabytes

  belongs_to :event

  def photo_from_url(url)
    Thread.new do
    self.photo = URI.parse(url)
    end
  end
end

1 个答案:

答案 0 :(得分:0)

相反,我已经决定最好在EventImage模型中添加'canned_image_id',然后在模型中使用photo_url方法,该方法可以选择返回回形针网址或固定图像网址,具体取决于是否或不是图像是固定图像。它还隐藏了辅助方法背后的这种复杂性:)