Alter: path_prefix динамически при вызове has_attachment через плагин Attachment Fu - PullRequest
0 голосов
/ 08 октября 2008

По умолчанию 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 Ответ

3 голосов
/ 09 октября 2008

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)))
...