2010-06-22 4 views
0

Je construis un système wiki pour une application. L'essence de la conception est qu'il existe un modèle d'article, et chaque article a de nombreuses révisions. Quand il est temps d'afficher un article, la révision la plus récente est tirée pour obtenir toutes les informations pertinentes.Ruby on Rails: Existe-t-il un moyen d'utiliser des attributs imbriqués pour un système wiki?

Cela semble être un cas parfait pour utiliser accept_nested_attributes_for afin que la modification de l'article accepte les modifications pour le compte des révisions. Cependant, je n'arrive pas à trouver un moyen de conserver toutes les anciennes révisions et d'apporter des modifications en créant une nouvelle révision à chaque modification. Y a-t-il un moyen de faire fonctionner cela?

Pour ceux qui préfèrent les choses moins abstraites:

class Article 
    has_many :revisions 
    has_one :current_revision, :class_name => "Revision", :order => "created_at DESC" 
    #contains columns that are not tracked for revisions, such as the article's Url slug 
end 
class Revision 
    belongs_to :article 
    #contains basic columns like wiki article body 
end 

Répondre

2

Vous n'avez pas besoin de tout ce travail, jetez un oeil à Vestal Versions petit bijou. Il apporte tout ce dont vous avez besoin pour les modèles versionnés. Il y a aussi un railscast pour cela.

Mais si vous voulez continuer à travailler avec des formes imbriquées, il y a deux bonnes Railscasts:

  1. Nested Model Form Part 1
  2. Nested Model Form Part 2
+0

avec les versions Vestal, si je finis par changer les colonnes du modèle versionné, cela signifie-t-il que toutes les versions existantes deviendraient inutilisables? –

+0

Désolé, mais je ne comprends pas votre question ici, mais j'espère que ma réponse sera toujours utile. Vestal Versions conserve les versions de vos modèles, chaque fois que vous mettez à jour votre modèle Vestal Version enregistre l'ancienne version, de sorte que vous pouvez y accéder à tout moment. Donc, ils ne seront pas inutilisables. – jigfox

+0

J'étais juste un peu inquiet de la fragilité des versions. Si je devais ajouter ou enlever une colonne de la table pour la base, je me demandais ce qui arriverait aux versions sauvegardées. –

Questions connexes