Rails + самоцвет Dragonfly: сохранение изображения в структуре каталогов на основе атрибутов объекта ActiveRecord - PullRequest
1 голос
/ 24 апреля 2010

Я использую dragonfly gem для управления изображениями и вложениями в приложении rails, и мне нужно хранить изображения в определенной структуре каталогов на основе моего пользовательская модель. скажем, у меня есть модель пользователя, которая имеет имя, и у каждого пользователя есть много альбомы, которые также имеют название, тогда я хочу, чтобы изображения были сохранены в "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"

Мне удалось изменить путь root_path в Dragon Fly, и я даже переопределяет относительный_сток_путь как это:

class MyDataStore < Dragonfly::DataStorage::FileDataStore
  private
   def relative_storage_path(suffix)
    "#{suffix}"
   end
end

но, тем не менее, я не знаю, как передать объект ActiveRecord атрибуты типа user.name и user.album.name до relative_storage_path создать свой идеальный путь.

Вы не представляете, как я могу это сделать?

1 Ответ

5 голосов
/ 01 мая 2010

Марк Эванс, автор драгоценных камней, оказал мне услугу и ответил на этот вопрос в группе Google. Вот его ответ, который работал довольно хорошо для моего случая:

Привет, там

Вы не можете сделать это из коробки, потому что хранилище данных специально разработан, чтобы быть очень простым - вы передаете данные, это дает вы возвращаете UID и т. д.

Если вы хотите сделать это, вам нужно будет приложить обезьянку-патч # save! лайк так:

class Dragonfly::ActiveRecordExtensions::Attachment
  def save!
    destroy! if uid_changed?
    self.uid = app.datastore.store(temp_object, parent_model) if has_data_to_store?
  end
end

Единственное, что я изменил выше, это то, что datastore.store занимает два аргументы сейчас.

Затем вам придется изменить / monkey-patch Dragonfly :: DataStorage :: FileDataStore # store, чтобы принять во внимание второй аргумент.

Из интереса, почему вы хотите, чтобы изображения были сохранены в этом формат

Приветствие Марка

...