2012-06-25 54 views
4

(图像属于邮政)Rails的:通过Carrierwave上传图片到Amazon S3仅适用于“编辑”

图像上传作品,但只有当我上传的帖子编辑图像。我想要在创建帖子时上传图片。

图片上传(“<%= 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负责在亚马逊S3中根据路径保存图像的。

我怎样才能让它在发布后上传图片,以便它可以获得Post.id?

+0

你可以发布模型代码吗? – John

+0

@John在这里你去:https://gist.github.com/2994293谢谢! – kibaekr

+0

嗯,你可以试着在你的模型中使用AR回调来查看是否强制保存有助于任何事情。 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html – John

回答

0

我也做了同样的事情,但我使用了cloudinary gem来保存我的图片。你能告诉我你的控制器在哪里写了编辑动作。 余米你看我的代码ü可以在编辑动作

def create 
@img = Image.new(params[:img]) 
    if @img.save 
    redirect_to(:action => 'show') 
    else 
    render('c_view') 
    end 
end 

URS

在控制器视图从那里走的是图像

<%= 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%> 
1

我有完全相同的概率lem,但我找到了一个解决方案。

我的ImageUploader.rb看起来像这样:https://gist.github.com/egbertp/7572501。在这个文件的第9行,你会看到include CarrierWaveDirect::Uploader。通过使用直接上传技术,您的网站用户将直接上传他/她的文件到Rackspace云。但是,在上传时,图像模型尚未在您的数据库中创建,导致错误(正如您猜对的那样)。

通过禁用直接上传技术,网站用户将图像发送到您的网络服务器的拳头,然后创建图像模型并保存在数据库中。在我的ImageUploader类中,这也是必要的,因为我希望我的web服务器处理图像,以创建缩略图版本。

我希望这能帮助你或者将来的其他人。

此致敬礼 Egbert

相关问题