инициализация копии фотографии в другой модели с помощью плагина скрепки для рельсов

Вот мой вопрос. У меня есть модель пользователя с одним прикрепленным аватаром. У этой модели много личных фотографий (с accepts_nested_attributes_for).

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

Я не совсем уверен, как это сделать. Поместил бы я его в свой контроллер или пользователя в хук after_save в модели? Я использую Paperclip с хранилищем db, поэтому было бы хорошо, если бы каким-то образом во время сохранения это было инициализировано, поэтому мне не нужно вытаскивать его обратно ... Может быть, я мог бы использовать скрытое поле формы?


person V_H    schedule 29.10.2009    source источник


Ответы (1)


Честно... Я не уверен, что рекомендовал бы этот курс действий. Многие люди загружают аватары, которые не являются фотографиями. Если вы сделаете это, вы, безусловно, должны дать пользователю возможность удалить фотографию, не удаляя при этом его аватар. Это означает, что вам нужно продублировать вложение. Для этого вам нужно подключиться к обратному вызову after_avatar_post_process. В этом обратном вызове создайте новый личный фотообъект. В приложении фотомодели photo назовите что-то вроде personal_photo.photo.assign(avatar.path). Я думаю, что это должно сработать, но я не пробовал. Меня больше всего беспокоит то, что вызов assign может не создать новое место для вложения. Я думаю, что да, но я не знаю абсолютно наверняка. По крайней мере, это близко к тому, что вам нужно сделать, и должно заставить вас двигаться в правильном направлении.

person Bob Aman    schedule 29.10.2009
comment
Извините за вводящий в заблуждение пример, я упростил то, что происходит, для ясности (очевидно, это не сработало !!), на самом деле это не пользовательские / личные фотографии, это имеет смысл для моего приложения :) Спасибо, я попробую это - я не знал об этом обратном вызове. - person V_H; 30.10.2009
comment
Одна из самых раздражающих вещей, которые делают спрашивающие, — это изменение некоторых деталей того, что они строят, чтобы замаскировать это. Лучше просто быть полностью честным, так как это позволяет людям, которые отвечают вам, дать вам полезную информацию. - person Bob Aman; 30.10.2009