通过Attachment Fu插件调用has_attachment时动态更改:path_prefix

时间:2008-10-08 09:01:08

标签: ruby-on-rails ruby attachment-fu

默认Attachment 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

1 个答案:

答案 0 :(得分: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)))