Je veux stocker un tableau de 3 éléments: les 3 derniers commentaires d'un post. Je sais que je pourrais joindre la table de commentaires à celle de Post, mais j'éviterais de faire cette lourde demande à des fins de mise à l'échelle.
Je me demandais donc quelle était la meilleure façon de stocker ces 3 éléments, car je voudrais les mettre à jour facilement chaque fois qu'un nouveau commentaire est fait: supprimer le dernier commentaire et ajouter le nouveau.
Quelle est la bonne façon de procéder? Le stocker dans un tableau sérialisé ou dans un objet JSON?
Vous pouvez stocker des tableaux et des hachages à l'aide de la déclaration serialize
d'ActiveRecord:
class Comment < ActiveRecord::Base
serialize :stuff
end
comment = Comment.new # stuff: nil
comment.stuff = ['some', 'stuff', 'as array']
comment.save
comment.stuff # => ['some', 'stuff', 'as array']
Vous pouvez spécifier le nom de classe auquel le type d'objet doit être égal (dans ce cas Array
). C'est plus explicite et un peu plus sûr. Vous n'aurez pas non plus à créer le tableau lorsque vous affecterez la première valeur, car vous pourrez l'ajouter au tableau existant (vide).
class Comment < ActiveRecord::Base
serialize :stuff, Array
end
comment = Comment.new # stuff: []
comment.stuff << 'some' << 'stuff' << 'as array'
Vous pouvez même utiliser une version plus soignée appelée store: http://api.rubyonrails.org/classes/ActiveRecord/Store.html
Cela devrait gérer votre cas d'utilisation à l'aide d'une méthode intégrée.