Рельсы + драгоценный камень Стрекоза:Сохранение изображения в структуре каталогов на основе атрибутов объекта ActiveRecord.

StackOverflow https://stackoverflow.com/questions/2705020

Вопрос

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

Мне удалось изменить root_path в Dragon Fly, и я даже отменил жато -nertavity_storage_path

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

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

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

Это было полезно?

Решение

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

Всем привет

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

Если вы хотите это сделать, вам придется пропатчить Attachment#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 нужно два args сейчас.

После этого вам нужно будет модифицировать/monkey-patch Dragonfly::D ataStorage::FileDataStore#store, чтобы учесть Второй аргумент.

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

Аплодисменты Метка

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top