Paperclip 在 has_many 关联中添加来自 URL 的图像
Paperclip add image from URL in has_many association
我有这个模型:
产品 -> Products_Images.
我可以从一个表单中添加多张图片,上传图片是我的电脑。我想添加来自 URL 的图像而不是本地图像。
Paperclip 添加了这个功能:
https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL
但我不知道如何在 has_many 协会中应用它。
我尝试在 ProductImages 模型中添加一个方法,并在创建产品后为每个 URL 调用它。不知道是不是一定要在Product模型中直接使用这个方法
Paperclip的wiki方法我应该放在哪里试试?
这是一个很好的要点(不是我写的)。它应该让你到达那里:https://gist.github.com/jgv/1502777
require 'open-uri'
class Photo < ActiveRecord::Base
has_attached_file :image # etc...
before_validation :download_remote_image, :if => :image_url_provided?
validates_presence_of :image_remote_url, :if => :image_url_provided?, :message => 'is invalid or inaccessible'
private
def image_url_provided?
!self.image_url.blank?
end
def download_remote_image
io = open(URI.parse(image_url))
self.original_filename = io.base_uri.path.split('/').last
self.image = io
self.image_remote_url = image_url
rescue # catch url errors with validations instead of exceptions (Errno::ENOENT, OpenURI::HTTPError, etc...)
end
end
感谢作者。
以后,通常最好post尝试解决问题的代码。
我有这个模型: 产品 -> Products_Images.
我可以从一个表单中添加多张图片,上传图片是我的电脑。我想添加来自 URL 的图像而不是本地图像。
Paperclip 添加了这个功能: https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL 但我不知道如何在 has_many 协会中应用它。
我尝试在 ProductImages 模型中添加一个方法,并在创建产品后为每个 URL 调用它。不知道是不是一定要在Product模型中直接使用这个方法
Paperclip的wiki方法我应该放在哪里试试?
这是一个很好的要点(不是我写的)。它应该让你到达那里:https://gist.github.com/jgv/1502777
require 'open-uri'
class Photo < ActiveRecord::Base
has_attached_file :image # etc...
before_validation :download_remote_image, :if => :image_url_provided?
validates_presence_of :image_remote_url, :if => :image_url_provided?, :message => 'is invalid or inaccessible'
private
def image_url_provided?
!self.image_url.blank?
end
def download_remote_image
io = open(URI.parse(image_url))
self.original_filename = io.base_uri.path.split('/').last
self.image = io
self.image_remote_url = image_url
rescue # catch url errors with validations instead of exceptions (Errno::ENOENT, OpenURI::HTTPError, etc...)
end
end
感谢作者。
以后,通常最好post尝试解决问题的代码。