2010-08-24 4 views
4

BrowserCMS peut "supprimer" des objets, ce qui définit fondamentalement l'attribut: deleted à true. Paperclip exécute le code suivant d'abord pour obtenir tous les objets d'une classe spécifique:BrowserCMS et Paperclip

Person.connection.select_values(Person.send(:construct_finder_sql, :select => 'id')) 

Cela pourrait revenir [1, 2, 3]. Même si, disons, 3 a: deleted mis à true. Paperclip utilise ensuite ActiveRecord pour obtenir tous les objets People en utilisant la liste d'identifiants précédente. Malheureusement, BrowserCMS ne retourne pas les objets marqués comme supprimés, donc Paperclip panique en disant "Impossible de trouver une personne avec ID = 3".

Je ne sais pas où aller à partir d'ici à court d'un patch de singe. Pensées?

Répondre

1

Ainsi, la façon hacky de résoudre ce (qui pourrait facilement se transformer en une fourchette de trombone) est de modifier le code ci-dessus simplement prêt:

Person.all.collect(&:id) 

ou

Person.connection.select_values(Person.send(
    :construct_finder_sql, 
    :select => 'id', 
    :conditions => { :deleted => false } 
)) 

Le premier option force simplement Paperclip à exécuter la requête via Rails, qui passe en effet par BrowserCMS, utilisant ainsi ses contraintes (ie: ne pas voir les enregistrements supprimés). La deuxième option fait à peu près la même requête, mais ignore les enregistrements supprimés par BCMS.

Je crois que la première option est la meilleure car elle permet à BCMS de contrôler la requête, donc si quelque chose change, votre patch singe ne se cassera pas.