我通过典型的ORM设置使CarrierWave正常工作并通过表单上传。我想弄清楚如何在表单提交上下文之外使用CarrierWave。例如,当用户注册时,我想抓住他们的gravatar并将其存储在CarrierWave中。这就是我所拥有的,它不起作用:
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
uploader = ImageUploader.new
uploader.store! gravatar_url
也没有错误。我一直在寻找网络,但一直无法找到解决方案。
答案 0 :(得分:45)
(假设您的用户图像字段仅称为“图像”)
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
@user.remote_image_url = gravatar_url
@user.save
我认为这是根据carrierwave docs和一些搜索的最佳方式。
享受!
答案 1 :(得分:19)
实际上,如果您使用的是活动记录/模型帮助程序,则可以使用内置的remote_{attribute}_url
属性执行此操作(有关详细信息,请参阅CarrierWave railscast)。但是,我在源代码中挖了一下,看看这实际上是如何工作的,看来即使你不是,你也应该能够使用以下内容:
uploader = ImageUploader.new
uploader.download! some_remote_url
uploader.store!
试一试。
答案 2 :(得分:16)
我在尝试弄清store!
如何使用本地文件路径方面遇到了很多麻烦。事实证明,store!
实际上将文件作为参数,而不是字符串。
对于网址,您首先需要require 'open-uri'
,然后打开文件/网址。这样的事情应该有效:
require 'open-uri'
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
tempfile = open(gravatar_url)
uploader = ImageUploader.new
uploader.store! tempfile
同样适用于文件路径,但在这种情况下您不必要求open-uri
。