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? 方法时,这会引发以下错误。

# 的未定义局部变量或方法 'id'

我是否需要在对象和 PhotoStore 之间建立某种其他类型的关系?

还有一个单独的问题:使它成为不可知论者的最佳方法是什么?由于它只使用对象的 ID,我可以只在文件名中包含对象的名称,但这是最好的方法吗?

谢谢!

因为在File.join PHOTO_STORE, "#{id}.#{extension}"你调用方法 PhotoStore#id ,但它不存在。

你应该这样做

File.join PHOTO_STORE, "#{@object.id}.#{@object.extension}"

相关内容

  • 没有找到相关文章

最新更新