(图片属于帖子)
图像上传器有效,但仅限于我在Post Edit上传图像时。我希望在创建Post时上传图像。
图片上传(“<%= f.file_field:image%>”)位于新帖子中,所以我猜测Carrierwave正试图在创建帖子之前将图片上传到指定的路径,导致它不知道上传的位置。
这是ImageUploader文件:
class TrackImageUploader < CarrierWave::Uploader::Base
def cache_dir
"#{Rails.root}/tmp/uploads"
end
include CarrierWave::RMagick
#storage :file
#storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :featured do
process :resize_to_fill => [210, 145]
end
def extension_white_list
%w(jpg jpeg gif png)
end
end
我猜测上面代码中的store_dir负责在Amazon S3上的相应路径中保存图像。
我如何制作它以便在制作Post之后上传图像,以便它可以获得Post.id?
答案 0 :(得分:1)
我有完全相同的问题,但我找到了解决方案。
我的ImageUploader.rb如下所示:https://gist.github.com/egbertp/7572501。在此文件的第9行,您会看到include CarrierWaveDirect::Uploader
。通过使用直接上传技术,您的站点用户将他/她的文件直接上传到Rackspace云。但是,在上载时,尚未在您的数据库中创建Image模型,从而导致错误(正如您猜对的那样)。
通过禁用直接上传技术,网站用户将图像发送到您的网络服务器,然后创建图像模型并保存在数据库中。在我的ImageUploader类中,这也是必要的,因为我希望我的网络服务器处理图像,以便创建缩略图版本。
我希望这会对你或将来的其他人有所帮助。
祝你好运, 埃格伯
答案 1 :(得分:0)
我也做了同样的事情,但我使用了cloudinary gem来维护我的图像。你能告诉我你在哪里编写编辑动作的控制器。 我告诉你我的代码你可以用你的代码
编辑操作中的控制器中的
def create
@img = Image.new(params[:img])
if @img.save
redirect_to(:action => 'show')
else
render('c_view')
end
end
在视图中拍摄图像
<%= form_for :img, :url => {:action => "create"} do |f| %>
<%= f.label "Upload an image"%>
<%= f.hidden_field(:image_cache)%>
<%= f.file_field :image %>
<%= f.submit "Submit", class: "btn btn-success"%>
<% end %>
要在某些视图页面中显示图像,我已使用此
<% @img.each_with_index do |i|%>
<%= image_tag (i.image.url) %>
<%end%>