2013-03-12 16 views
0

對於那些熟悉rubygems的人,我使用CarrierWave來允許在我的應用上上傳照片。如何在照片上傳後顯示覆選框?

這是我用我的視圖代碼

Add a photo: 
    <%= f.file_field :image %> 

我怎樣才能讓一個複選框出現在我的視圖與它上面的一些文字,只有一張照片選擇上傳相處?

下面是完整的post.html.erb查看

<%= form_for @post, :html => {:multipart => true} do |f| %> 
    <%= render 'shared/error_messages', object: @post %> 
    <div class="field"> 
    <%= f.text_area :content, :cols => 5, :rows => 5 %> 
    </div> 
    Add a photo:<br> 
    <%= f.file_field :image %> 
    <br> 
    <%= f.submit "Submit", class: "btn btn-large btn-primary" %> 
<% end %> 

這是樁模型(相關部分)

class Post < ActiveRecord::Base 
    attr_accessible :content, :image 
    belongs_to :user 

    mount_uploader :image, ImageUploader 
end 

,並上傳模型

class ImageUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 

    # Choose what kind of storage to use for this uploader: 
    storage :file 
    # storage :fog 

    # 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 

    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    def filename 
    "#{secure_token(10)}.#{file.extension}" if original_filename.present? 
    end 

    def cache_dir 
    "#{Rails.root}/tmp/uploads" 
    end 

protected 
    def secure_token(length=16) 
    var = :"@#{mounted_as}_secure_token" 
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2)) 
    end 


end 
+0

顯示你的模型在哪裏你定義的圖像樣式和屬性? – 2013-03-12 15:00:49

+0

hmmm我使用了CarrierWave ruby​​gem,我只在我的Post模型中包含了這部分內容(請參閱更新後的文章) – user2159586 2013-03-12 15:04:55

回答

0

,所以你可以使用檢查圖像是否被選中的條件,然後你可以像文字一樣附加文本框和文本如下:

if image.image_url 
#your checkbox stuff and text stuff 
end 
+0

這就是我正在嘗試使用的內容:<%if image.image_url.exists? %>,但得到一些錯誤。我在更新後的文章中張貼了imageuploader模型。你知道正確的image.image_url應該是什麼嗎? – user2159586 2013-03-12 15:29:12

0

您每個帖子只能存儲一張照片,您需要將照片存儲在另一張表中。

class Post < ActiveRecord::Base 
attr_accessible :content, :title 
has_many :images 
end 

class Image < ActiveRecord::Base 
    attr_accessible :image, :image_cache, :post_id 
    belongs_to :post 
    mount_uploader :image, ImageUploader 
end 

因此,您可以選擇要與每個帖子關聯的圖片。在這裏找到一個例子:https://github.com/kdironside/carrierwave-multi-file-upload

+0

我在說的是,在用戶選擇要上傳文件後,如何使複選框+文本顯示正確,但在用戶點擊「發佈」之前?所以文件尚未上傳,它剛被選中。有沒有辦法做到這一點? – user2159586 2013-03-12 18:52:52

0

嗨,你可以檢查這個鏈接你的答案:它提供了一個JQuery的功能爲您的照片上傳。 http://blueimp.github.com/jQuery-File-Upload/

有關照片上傳寶石,你可以使用:

https://github.com/thoughtbot/paperclip - 回形針寶石 http://railscasts.com/episodes/134-paperclip - 回形針視頻教程。 http://railscasts.com/episodes/253-carrierwave-file-uploads - CarrierWave視頻教程。