2013-02-19 50 views
0

你好,我使用carrievwave gem上傳我的rails應用程序的圖像,它工作正常,但我無法訪問這些上傳的文件。我得到錯誤的路徑URL http://localhost/uploads/gallery/image_name/354340/1.jpg (這裏的 '354340' 的用戶ID不自動增量ID)錯誤的圖像路徑Url使用CarrierWave gem

電流路徑應該是這樣的http://doitfornow:3000/uploads/gallery/image_name/2/1.jpg

型號

class Gallery < ActiveRecord::Base 
    attr_accessible :image_name, :name, :user_id,:image_name#,:remote_image_name_url 
    mount_uploader :image_name, ImageUploader 
    belongs_to :user, :class_name => "User", :foreign_key => "user_id" 

end 

查看

<%@gallery.each do |f| %> 
<tr> 
    <td class="left"><%= f.Gname%></td> 
    <!-- # u.avatar.url --> 
    <td class="left"><%= image_tag f.image_name.url , :size => "50x50" %></td> 
    <td><%= link_to 'Detail',"/articles/detail?id="+f.Gid.to_s %></td> 
    <td class="left" colspan="5"><label class="input-control checkbox"><%= check_box_tag 'user_ids[]', f.Gid, false %> <span class="helper"></span></label></td> 
</tr> 
<% end %> 

image_uploder.rb

# encoding: utf-8 

class ImageUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    # include CarrierWave::jekyll-minimagick 


    # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility: 
    # include Sprockets::Helpers::RailsHelper 
    # include Sprockets::Helpers::IsolatedHelper 
    # Choose what kind of storage to use for this uploader: 
    storage :file 
    # storage :fog 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 


    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # # For Rails 3.1+ asset pipeline compatibility: 
    # # asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    # 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    # process :scale => [200, 300] 
    # 
    # def scale(width, height) 
    # # do something 
    # end 

    # Create different versions of your uploaded files: 
    # version :thumb do 
    # # process :resize_to_limit => [200, 200] 
     # process :resize_to_fill => [50, 50] 
    # # process :scale => [50, 50] 
    # end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    # def filename 
    # "something.jpg" if original_filename 
    # end 

end 
+0

你能發佈ImageUploader的內容嗎? – basgys 2013-02-19 11:54:10

+0

我編輯了我的問題@basgys – Gagan 2013-02-19 13:17:57

+0

2應該是您的圖庫ID,而是它是您的用戶ID?那對嗎?所以如果你做了類似於<%=「Model ID#{f.id}」%>的話,你會得到Model ID 2?你的image_uploder.rb似乎是正確的。但是,1.jpg是默認文件名? – basgys 2013-02-19 14:38:40

回答

0

我有同樣的問題。我是通過爲carrierwave創建一個模塊來完成的,因爲我有更多的上傳者來處理。我重寫'store_dir'方法並添加'set_store_dir'方法。 因此,我可以將我的文件存儲在我想要的位置。我在該類中設置了store_dir,包括上傳者 希望它有幫助

module Helper::Carrierwave 
     def set_store_dir(dir) 
      @storedir = dir 
     end 

     def store_dir 
      @storedir 
     end 
    end