2010-05-23 8 views
2

Je cherche à implémenter la fonctionnalité de prévisualisation dans mes messages d'échafaudage. Tout ce que je dois faire est de permettre à un utilisateur d'entrer des informations dans la nouvelle vue (/ posts/new), puis de remplacer le bouton de soumission par un bouton de prévisualisation. Une fois le bouton de prévisualisation cliqué, l'utilisateur est dirigé vers la page de prévisualisation (probablement/posts/new/preview). Si l'utilisateur souhaite effectuer un changement, il clique sur "revenir en arrière" ou, s'il est satisfait du message, il peut alors soumettre le message.Meilleure façon de créer une fonctionnalité de prévisualisation dans Rails

J'ai trouvé cet article (http://eyedeal.team88.org/node/105) mais il semble daté. Des idées sur quelle serait la meilleure approche pour cela?

Un grand merci, Tony

Répondre

0

Le lien que vous avez posté est un moyen, mais je préfère sauver objet et définir un indicateur booléen, disons publique false (: default => false défini dans la migration). Ensuite, ce que vous faites essentiellement est en fait créer le poste et rediriger pour montrer l'action, où vous avez bouton d'édition (action d'édition de rendu), post bouton (action personnalisée pour mettre le drapeau public à vrai) et bouton d'annulation (qui supprime réellement le poste) et peut-être continuer plus tard le bouton, qui conserve le poste et redirige vers une autre page, de sorte que l'utilisateur peut revenir plus tard et terminer l'édition.

Lorsque vous avez besoin d'afficher tous les messages, définissez un named_scope: visible,: conditions => ["posts.public =?", True] et appelez Post.visible au lieu de Post.all dans l'index et les actions similaires. Vous pouvez également définir un default_scope avec les conditions ['posts.public =?', False], mais en gardant à l'esprit que si vous voulez trouver des messages qui ne sont pas visibles, vous devrez utiliser #without_scope.

Cette méthode est meilleure que celle de votre lien, car l'utilisateur peut toujours revenir plus tard et finir de modifier le message et de le publier. Cependant, vous stockez plus d'objets dans la base de données et vous devez traiter les messages invisibles (ne les affichez pas par défaut, etc.)

+0

Je n'avais pas pensé à ça et c'est une bonne idée. Cependant, dans ce cas particulier, j'aimerais simplement pouvoir prévisualiser avant de sauvegarder dans la base de données, car les comptes d'utilisateur sont toujours une idée «si». En ce moment, il ressemble à craigslist en ce sens que vous n'avez pas besoin d'être enregistré pour poster. Merci pour la perspicacité! – slythic

3

Sur soumettre à partir de la page de création, dans la nouvelle action, créez l'objet mais ne l'enregistrez pas à la base de données. Rendez ensuite l'objet dans sa vue d'affichage avec un indicateur défini dans la nouvelle action pour afficher un bouton d'envoi. Dans votre vue de présentation, ayez toujours un formulaire avec tous les attributs de l'objet à enregistrer dans db dans les champs de saisie masqués ou dans l'affichage: none. Lorsque le drapeau est défini, vous affichez le bouton de soumission. Sur submit, vous allez à l'action new_to_db qui enregistre l'objet dans la base de données.

Questions connexes