1

Je voulais utiliser la gemme acts_as_list pour réorganiser les listes.AR équivalent à ces instructions SQL ou comment les utiliser autrement dans Rails?

Mais il ne semble pas gérer plus de requêtes restreintes que d'associations (je veux commander des listes basées à la fois sur une association ET des objets avec un attribut booléen défini sur true). Si je ne me trompe pas, en regardant les journaux, il semble que la gemme utilise une instruction SQL qui met à jour de nombreux enregistrements en même temps.

Je voudrais utiliser exactement les mêmes instructions pour factoriser mon propre code de commande personnalisé.

Ces deux énoncés suivants se déplacent d'un objet question de la position 3 à 8.

UPDATE "questions" SET position = (position - 1) WHERE ("questions"."question_list_id" = 2 AND position > 3 AND position <= 8) 
UPDATE "questions" SET "position" = ?, "updated_at" = ? WHERE "questions"."id" = 55 [["position", 8], ["updated_at", "2014-06-09 14:40:47.545040"]] 

Est-il possible avec ActiveRecord ou de toute autre manière, et si oui, comment, de réutiliser le code ci-dessus?

Répondre

1

Vous pouvez mélanger SQL et ActiveRecord pour atteindre ces instructions SQL. Ils peuvent être écrits:

Question.where(question_list_id: 2, position: [4..8]).update_all('position = (position - 1)') 
Question.update(55, position: 8) 

Le gem act_as_list n'est pas responsable de tri des éléments, il maintient juste DB la position des éléments. C'est à vous de trier les éléments avec l'API fournie par act_as_list. Il existe également une option scope si vous ne souhaitez cibler que certains éléments. Voir source.

Questions connexes