Как использовать фотографию в скрепке несколько раз и удалять только при удалении всех экземпляров - PullRequest
0 голосов
/ 29 ноября 2010

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

Какой лучший способ сделать это в Скрепке?

1 Ответ

1 голос
/ 29 ноября 2010

Если вы хотите, чтобы фотография использовалась только на нескольких страницах, но не по-разному, то есть без разных стилевых конфигураций в скрепке, то вам нужно иметь только одну запись для каждой фотографии и связывать ее с другими записями с помощью has_many: through ассоциация. Таким образом, вы можете позволить средней модели вызвать запись фотографии после уничтожения, чтобы увидеть, остались ли какие-либо другие ассоциации для фотографии.

Однако очень сложно быть конкретным, не видя хотя бы вашей текущей структуры и ассоциаций модели и некоторого примера того, что вашим пользователям будет разрешено делать.

В любом случае, я бы не советовал на самом деле иметь две отдельные записи скрепки, указывающие на один и тот же файл в файловой системе.

Edit:

Если вы хотите избежать фактической загрузки, вы всегда можете использовать исходный файл при создании новой записи:

@first_photo = Photo.find(1)

@new_photo = Photo.new
@new_photo.attachment = @first_photo.attachment
@new_photo.save

Фотография будет по-прежнему сохраняться один раз для каждого экземпляра, но загрузка будет исключена.

...