Je crée une application nécessitant l'approbation de l'administrateur lorsque les articles sont créés et mis à jour. J'ai utilisé la trace de papier pour accomplir ceci, en stockant chaque mise à jour aux articles.Rails & Papertrail - Inclure la version précédente dans la requête
Lorsqu'un article est mis à jour, le champ "published" est défini sur false. Puisque je veux afficher la version approuvée/publiée la plus récente de l'article, j'ai besoin d'une sorte de portée qui vérifie si la version actuelle de l'article est approuvée, et si ce n'est pas le cas, elle recherche dans les versions précédentes jusqu'à ce qu'elle trouve un approuvé/publié.
def self.published(query={})
where(query).map do |article|
article.published? ? article : article.last_published_version
end.compact! || []
end
def published?()
published
end
def last_published_version()
return self if published?
published_versions = versions.select{ |version| version.reify.try(:published?) }
published_versions.present? ? published_versions.last.reify : nil
end
Maintenant, depuis que je me sers map
ici, ma requête est retourne un tableau au lieu d'une relation ActiveRecord. Je voudrais enchaîner des requêtes supplémentaires sur les articles publiés, donc c'est un problème.
Par exemple, je voudrais faire: Article.published.where(...).order_by(...)
, etc
Toutes les idées sur l'accomplissement de cette?
Merci, votre contribution a été très utile. Je suis venu avec des requêtes qui me permettent d'obtenir toutes les lignes pertinentes à partir des tables (si elle est définie à publié dans la table des articles, je prends cette ligne, sinon je prends la ligne de la table des versions). Cependant, ce que je finis avec est une combinaison de lignes utilisables, et les lignes qui ont des données sérialisées. L'ajout de métadonnées résoudrait le problème, mais j'ai besoin fondamentalement de tous les champs, et je ne pense pas que ce soit une bonne idée de recréer toutes ces colonnes dans la table des versions. Des pensées? – RyanB
Pouvez-vous expliquer "lignes utilisables" et "lignes qui ont des données sérialisées", quelle est la différence? – nowk
Je pense qu'il veut dire qu'il obtient un mélange d'articles et de versions où les articles sont "utilisables" (objets réguliers), mais les versions contiennent des données sérialisées. Idéalement, vous retrouverez toujours le même type d'objets. - @RyanB Je me rends compte que cette question a 3 ans, mais je suis confronté au même problème et j'aimerais entendre ce que vous avez fini par faire. – Marc