2011-04-02 96 views
4

我在我的更新表單中預覽了附加圖像。當用戶在附件字段上獲取驗證錯誤時,會出現問題。在這種情況下,圖片縮略圖網址會變成好像圖片上傳時沒有任何錯誤(它顯示未在服務器上保存的文件的名稱)。驗證錯誤上的回形針錯誤附件網址

下面是我如何在我的視圖中獲取圖像URL: <%= image_tag(@product.photo.url(:medium)) %>

控制器:

def update 
    @product = Product.find(params[:id]) 
    @product.update_attributes(params[:product]) ? redirect_to('/admin') : render(:new) 
end 

def edit 
    @product = Product.find(params[:id]) 
    render :new 
end 

型號:

class Product < ActiveRecord::Base 

    <...> 

    @@image_sizes = {:big => '500x500>', :medium => '200x200>', :thumb=> '100x100>'} 

    has_attached_file :photo, :styles => @@image_sizes, :whiny => false 
    validates_attachment_presence :photo 
    validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'], :message => I18n.t(:invalid_image_type) 
    validates_attachment_size :photo, :less_than => 1.megabytes, :message => I18n.t(:invalid_image_size, :max => '1 Mb') 
    after_post_process :save_image_dimensions 

    <...> 

end 

UPD:的simpliest溶液是在控制器的更新動作在視圖@product.update_attributes<% @photo_file_url ||= @product.photo.url(:medium) %>之前添加@photo_file_url = @product.photo.url(:medium)

+1

請附上您的代碼你的'edit'和'update'動作。 – raidfive 2011-04-02 23:51:26

+0

他們很簡單。只有少數CRUD提示('Product.find(params [:id])'和'@ product.update_attributes(params [:product])'分別用於編輯和更新)。 – sunki 2011-04-02 23:56:18

+0

使用這些更新編輯現有帖子是一種更常見的做法。 – raidfive 2011-04-02 23:58:33

回答

1

其實我有同樣的問題,這裏是我以前做的事(這似乎一個黑客位),但作品並會顯示在更新失敗的默認或下一張圖像

after_validation :logo_reverted? 

def logo_reverted? 
    unless self.errors[:logo_file_size].blank? or self.errors[:logo_content_type].blank? 
    self.logo.instance_write(:file_name, self.logo_file_name_was) 
    self.logo.instance_write(:file_size, self.logo_file_size_was) 
    self.logo.instance_write(:content_type, self.logo_content_type_was) 
    end 
end 
+0

感謝您的回答!但我認爲我的解決方案更容易一些。 – sunki 2011-05-14 13:00:03

+0

@skrafi - 我同意你的解決方案比較容易,但我無法正確顯示我的刪除和更改,因爲隊列中仍有一個文件。我覺得我仍然需要檢查錯誤來刪除文件,以便我的刪除ajax鏈接不會顯示,除非那裏有真正的文件。思考? – bokor 2011-05-19 14:46:53

1

在我的應用我有類似的問題,所以我用:

<%= image_tag(@product.photo.url(:medium)) if @photo.valid? %> 

沒有什麼方式顯示出來,如果照片是無效的(即創建成功),但是當你編輯現有記錄的圖像所示。

希望有所幫助。

+0

使用'@ product.valid?'會在新操作中產生非常奇怪的問題(我對新操作和更新操作都使用相同的視圖)。如果我在我的視圖中有'@ product.valid?',我也會在照片字段上看到'不能空白'的錯誤。請參閱[查看代碼](http://pastie.org/1752064)和[結果](http://pastie.org/1752077)(提交之前)。 – sunki 2011-04-03 21:33:13

+0

嗯,你是否試過'if @ product.errors.any?'而不是?不知道爲什麼它很重要,但這是一個奇怪的錯誤,所以值得一試...... – Andrew 2011-04-03 23:53:39

+0

我現在在代碼中使用'@ product.errors.any?'而不是'@ product.valid?'以上。但是,如果我想在更新操作中顯示照片,當我嘗試上傳新照片併發生任何錯誤時,仍會出現問題。僅當模型沒有錯誤時,回形針纔會保存照片。如果它有任何Paperclip給與URL未保存的文件名稱。她** UPD **在我上面的問題中,我發現解決這個問題的唯一解決方案。 – sunki 2011-04-04 10:15:58