Вложения скрепки с динамическими размерами стиля из модели

Используя Rails 2, я пытаюсь отделить разные динамические размеры изображений через другую модель от модели скрепки. Мой текущий подход с использованием Proc выглядит следующим образом:

class File < ActiveRecord::Base
  has_many :sizes, :class_name => "FileSize"
  has_attached_file(
    :attachment,
    :styles => Proc.new { |instance| instance.attachment_sizes }
  )

  def attachment_sizes
    sizes = { :thumb => ["100x100"] }
    self.sizes.each do |size|
      sizes[:"#{size.id}"] = ["#{size.width}x#{size.height}"]
    end
    sizes
  end
end

class FileSize < ActiveRecord::Base
  belongs_to    :file

  after_create  :reprocess
  after_destroy :reprocess

  private

  def reprocess
    self.file.attachment.reprocess!
  end
end

Кажется, все работает нормально, но, видимо, никакие стили не обрабатываются и изображение не создается.

Кому-нибудь удавалось делать подобные вещи?

-- Обновить--

Очевидно, что метод attachment_sizes для экземпляра иногда не определен для #, но не должен ли экземпляр действительно быть #? Для меня это выглядит как изменение экземпляра.


person pex    schedule 27.10.2010    source источник


Ответы (2)


Решение простое. instance в моем первом примере Proc является экземпляром Paperclip::Attachment. Поскольку я хочу вызвать метод File, нужно получить вызывающий экземпляр внутри Proc:

Proc.new { |clip| clip.instance.attachment_sizes }

instance представляет File-экземпляр в данном примере.

person pex    schedule 29.10.2010

Я предполагаю, что у вас все работает со скрепкой, например, вы загрузили изображение, и теперь процесс просто не работает.

Он должен работать. Попробуйте не помещать размер в массив.

ты делаешь это

sizes = { :thumb => ["100x100"] }

Но у меня есть это, где я не помещаю размер в арри

sizes = { :thumb => "100x100" }

Попробуйте это :)

person thenengah    schedule 27.10.2010
comment
Привет, спасибо за быстрый ответ. Я попытался еще немного изолировать свою проблему с помощью вопроса-обновления. С другой стороны, я не могу проверить, работает ли ваша идея. Но на самом деле все отлично работало заранее, хотя я использовал массив - person pex; 27.10.2010
comment
что вы имеете в виду, что вы не можете проверить, работает ли моя идея, просто удалите скобки массива и загрузите :) - person thenengah; 27.10.2010
comment
Я имел в виду, что это работает так же, поэтому на мою проблему это не влияет ^^, спасибо! - person pex; 27.10.2010