Attachement_fu, formatage images selon action ou controller

Bonjour,

Je chercherai à savoir comment filtrer selon qq paramètres possiblement
passables au model les format d’image spécifiés dans le/les models
conernés par les upload par attachement_fu.

Cad, ayant prévu 6 format possible de recadrage dans le model asset
(:panorama_cropped => [550,550], :panorama_constraint => ‘550x300>’,
:panorama => ‘550’, :medium => ‘400’, :thumb => ‘x150’, :square_thumb =>
[75,60]), est il possible selon donc un paramètre prévu de n’utiliser
qu’une partie de ces précisions; à savoir pour un logo, ne serait
utilisé que :thumb et :square_thumb.

J’imagine que ce n’est qu’une histoire de syntaxe et que certains def
qqchose doivent être précisés, mais si qq à déjà effectué ce type
d’opération, merci d’avance pour les infos.

J’ai tripoté dans tous les sens attachment_fu il y a peu, et il est tout
sauf souple. Ce qui n’est pas prévu n’est généralement pas possible sans
beaucoup de travail.

Ceci dit, si tu es d’attaque pour tester
papercliphttp://www.thoughtbot.com/projects/paperclip,
que je trouve personnellement bien meilleur, plus simple, plus lisible,
et
beaucoup plus souple, tu dois pouvoir faire ça tout simplement en
faisant du
polymorphisme avec ton modèle “asset”, et en modifiant les paramètres
dans
chaque modèle polymorphique.

Cette solution marchera peut-être aussi avec attachment_fu, mais je n’ai
aucune garantie à t’offrir.


Michel B.

C’est justement cette notion de polymorphisme que j’ai du mal Ã
maîtriser;
le concept de polymorphisme, c ok, cependant c souvent des pb de setup
ou de syntaxe, à savoir je vois mal ou celà se met, comment celÃ
s’utilise.

Donc si ce n’est pas trop demandé et si de l’aide à ce niveau est
possible; qq exemple; merci d’avance.

Sinon j’avais vu paperclip, je suis un peu a bout de souffle là sur un
projet et si celà est possible par attachement_fu… on va dire que le
prochain sera plus “agile”.

Comme je te l’ai dit, sauf mauvaise surprise le polymorphisme devrait
être
sans problème avec attachment_fu, même si attachment_fu m’a aidé Ã
comprendre le concept de mauvaise surprise à un degré supérieur…

Donc, pour faire du polymorphisme, c’est facile :

class Asset < AR::B

end

class Picture < Asset

has_attachment { … }

end

class Banner < Asset

has_attachment { … }

end

Quand aux associations polymorphiques, tu trouveras ton bonheur
icihttp://wiki.rubyonrails.org/rails/pages/UnderstandingPolymorphicAssociationspour
le comprendre.

Bonne lecture, et n’hésite pas à poser des questions.

Sans entrer dans les détails, attachment_fu est codé d’une manière aussi
géniale qu’illisible, ce qui ne facilie pas le travail quand on veut
faire
des choses plus spécifiques que ce qu’il propose de base (p.e. recadrer
la
vignette d’une image, spécifier un modèle différent par type de
vignette,
etc.). De plus, il manipule les images avec un processeur d’image Ruby,
entre autre Rmagick, ce qui a tendance à être plus gourmand en mémoire
et
mois optimisé même si le processeur Ruby n’est qu’une interface pour une
bibliothèque de bas niveau en C (c’est le cas pour Rmagick qui utilise
ImageMagick) ; une autre inconvénient est que la plupart des
hébergements
mutus peuvent vite s’avérer des obstacles lorsqu’il s’agit d’installer
ce
genre de choses (chez DreamHost, j’ai dû compiler ImageMagick, puis
installer à la main la gem Rmagick, 5 ou 6 fois pour réussir à enfin
trouver
la bonne combinaison qui ne faisait pas planter Rmagick parce qu’il ne
trouvait pas exactement la bonne version de ImageMagick avec laquelle il
voulait bien travailler). Enfin, attachment_fu c’est un document = une
classe modèle, ce qui peut vite être lourd par exemple quand tu veux des
images, plus des bannières de site, plus des avatars d’utilisateurs,
plus
(…) qui doivent avoir des vignettes de tailles différentes, etc.

Alors que paperclip, c’est simple, il n’y a que 3 champs à rajouter à un
modèle pour pouvoir y ajouter une image et les onglets, c’est souple,
ça
permet de stocker les images là où tu les veux, et comme ça utilise
ImageMagick en ligne de commande tu n’as pas à trop te soucier
d’installer
une version particulière de ImageMagick et pas besoin du tout
d’installer
Rmagick. J’ajouterai en cerise sur le gâteau que le code de paperclip
est
bien ordonné, lisible, commenté, et qu’il est facile d’ajouter des
fonctionalités supplémentaires en le prenant comme exemple.

J’espère que ça répond à ta question.

Sinon, pour le polymorphisme, déjà tu fais un fichier par classe modèle,
même les modèles polypormphiques, donc pas tout dans le fichier “Asset”,
ou
ton appli ne saura pas où trouver les définitions des classes héritières
si
le fichier asset.rb n’est pas chargé auparavant. Ensuite, si tu fais tu
polymorphisme, tu ne devrais pas faire de Asset.new, ce sont tes classes
héritières qui devront faire le boulot.

Merci pour ces précisions models.
En relisant paperclip; effectivement c’est vraiment bien et permet de
résoudre le pb que actuel.
Pas encore testé; est il adapté à tout type de fichier (apparemmetn oui,
mais…) ?

Avais récupéré la fonction suivante qui permet de récupérer tous types
de fichiers distants :

def source_uri=(uri)
io = open(URI.parse(uri))
(class << io; self; end;).class_eval do
define_method(:original_filename) { base_uri.path.split(’/’).last }
end
self.uploaded_data = io
end

c un peu moyen comme outil mais bien pratique pour import, pensez vous
que cette extension passe dans le model si paperclip ?

Un grand merci dans tous les cas pour ces informations.

Dison pour le moment que il y a ça :


class Asset < ActiveRecord::Base
bla…
end

ca reviendrais a completer le fichier du model asset comme suit

class Asset < ActiveRecord::Base
bla…
end

class Picture < Asset
blabla…
end

et de là autant Asset.create(…) que Picture.create(…) devienent dispo, c
bien ça ?

Sinon, je me permet de demander; Ã quel niveau donc l’utilisation de ce
plugin a posé problème ?

Michel B. wrote:

Comme je te l’ai dit, sauf mauvaise surprise le polymorphisme devrait
être
sans problème avec attachment_fu, même si attachment_fu m’a aidé Ã
comprendre le concept de mauvaise surprise à un degré supérieur…

Donc, pour faire du polymorphisme, c’est facile :

class Asset < AR::B

end

class Picture < Asset

has_attachment { … }

end

class Banner < Asset

has_attachment { … }

end

Quand aux associations polymorphiques, tu trouveras ton bonheur
icihttp://wiki.rubyonrails.org/rails/pages/UnderstandingPolymorphicAssociationspour
le comprendre.

Bonne lecture, et n’hésite pas à poser des questions.

Apparemment il va falloir adapter, mais ça ne me semble pas
insurmontable.

Bon courage.


Michel B.

ok merci beaucoup.

Michel B. wrote:

Apparemment il va falloir adapter, mais ça ne me semble pas
insurmontable.

Bon courage.


Michel B.