0

默认情况下,附件 Fu将上传的文件存储在"public/#{table_name}". 我想将其修改为类似"public/#{table_name}/#{site_id}"site_id模型的属性在哪里。请注意,我尝试过使用self.site_id但都失败了。

has_attachment :storage => :file_system, 
               :max_size => 25.megabytes,
               :path_prefix => "public/#{table_name}/#{site_id}",
               :thumbnails => { 
                 :large => '256x256>', 
                 :medium => '128x128>', 
                 :small => '64x64>' 
               }

我收到“未定义的局部变量或方法 site_id”错误消息。从工作中删除#{site_id}组件:path_prefix并运行该initialize方法。我可以site_id按预期访问。

我有一个initialize看起来像这样的方法:

def initialize(site_id = nil)
  super(nil)
  self.site_id ||= site_id
end

我通过 Rails 控制台实例化对象,如下所示:

r = Resource.new(100)

has_attachment方法是否在我的initialize方法之前运行?:path_prefix实例化模型时如何将参数动态传递给?

4

1 回答 1

3

site_id是一个动态值,所以你不能在类中设置它。您需要在模型中重新定义#full_filename。当前的定义如下所示:

def full_filename(thumbnail = nil)
  file_system_path = (thumbnail ? thumbnail_class : self).attachment_options[:path_prefix].to_s
  File.join(RAILS_ROOT, file_system_path, *partitioned_path(thumbnail_name_for(thumbnail)))
end

将最后一行更改为:

File.join(RAILS_ROOT, file_system_path, site_id.to_s, *partitioned_path(thumbnail_name_for(thumbnail)))
于 2008-10-09T01:28:59.317 回答