0
我正在嘗試爲圖像上載創建一個單獨的模型類,該類先前位於對象的控制器中。我也想讓它不可知,所以我可以使用多個對象中的一個類上傳圖像。Rails 3自定義類問題
我在原來的對象的模型類,我現在有以下幾點:
class Object < ActiveRecord::Base
after_save :photo_store
delegate :has_photo?, :photo, :photo_path, :store_photo, :photo_filename, :to => :photo_store
def photo_store
PhotoStore.new(self)
end
end
然後,PhotoStore類看起來是這樣的:
class PhotoStore
attr_reader :object
def initialize(object)
@object = object
end
def photo=(file_data)
unless file_data.blank?
@file_data = file_data
self.extension = file_data.original_filename.split('.').last.downcase
end
end
PHOTO_STORE = File.join RAILS_ROOT, 'public', 'photo_store'
def photo_filename
File.join PHOTO_STORE, "#{id}.#{extension}"
end
def photo_path
"/photo_store/#{id}.#{extension}"
end
def has_photo?
File.exists? photo_filename
end
private
def store_photo
if @file_data
FileUtils.mkdir_p PHOTO_STORE
File.open(photo_filename, 'wb') do |f|
f.write(@file_data.read)
end
end
end
end
然而,這將引發下面當我嘗試錯誤並使用has_photo?方法在對象的視圖中。
undefined local variable or method `id' for #
我是否需要在Object和PhotoStore之間放置一些其他類型的關係?
另外一個問題:使這個不可知論的最佳方法是什麼?由於它只使用對象的ID,所以我可以在文件名中包含對象的名字,但這是做到這一點的最佳方式嗎?
謝謝!
衛生署!謝謝,這絕對是! 8分鐘後我會接受這個答案(因爲StackOverflow的規則)。你對第二部分有什麼看法嗎?或者,我上面提到的最好的方法是什麼? – Justin 2011-05-19 17:08:16
也許包含類名稱到文件夾或文件名的一部分路徑 – Anton 2011-05-19 17:11:11
謝謝,我只是有另一個問題:當我嘗試創建一個新的對象,我得到以下錯誤:「未知的屬性:照片」。我是否需要以其他方式編寫委託:照片以啓用屬性? – Justin 2011-05-20 16:36:54