2012-06-25 117 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

相關問題