Skrobię sobie aplikację i mam mały problem. Nie mogę znaleźć punktu zaczepienia. Potrzebuję wykonać pewną akcję podczas dodawani zdjęcia; policzyć ilość pikseli danego koloru. Następnie do modelu - który posiada załącznik - przekazać te informacje przed zapisaniem na bazę. Z tego co ogarnąłem. Powinienem napisać sobie processor który będzie się odpalał przy ładowaniu?
Ok, to może być wystarczające rozwiązanie. Pytanie tylko jak teraz w modelu stworzyć instancję Image? próbowałem coś takiego ale niestety nie działa. Oczywiście mam rmagic.
Wydaje mi się, że processory powinny być wykorzystywane w przypadku, kiedy chcemy w jakiś sposób modyfikować/przetwarzać/generować obrazy (tak jak domyślny Paperclip::Thumbnail). W przypadku odczytania informacji z obrazka i zapisania jej w modelu, bardziej będzie chyba pasować callback. Mógłby to być standardowy before_save, jednak warto przyjrzeć się tym, które dostarcza paperclip: https://github.com/thoughtbot/paperclip#events . Wywołując np. taki after_post_process mamy pewność, że obrazki zostały już przetworzone (istnieją na serwerze) i można na nich wykonywać jakieś operacje, np. odczyt kolorów
Dzięki wszystkim za podpowiedzi.
Z tego co widzę to problem tkwi w samym RMagic. Realizuję zadanie w momencie after_post_process.
Wołam ->
Magic::Image.read(self.image.path).first
Wywala ->
uninitialized constant Photo::Magic
Oczywiście RMagic działa. Na pewno istnieje image.path już podczas wołania metody. Pojęcia nie mam co jeszcze może być piknięte.
Ktoś może miał już podobne problemy?
EDIT
Problem udało się rozwiązać. Dopiero w after_save zdjęcie znajduje się na dysku i da się go załadować. Całość kody dla modelu wygląda tak: