[RAILS] Connaissez-vous Decorator?

Qu'est-ce que Decorator?

En enveloppant un objet existant avec un nouvel objet Decorator, vous pouvez ajouter ou réécrire des fonctions de l'extérieur sans toucher directement le contenu des fonctions et des classes existantes. Il est également utilisé comme alternative à l'héritage de classe lors de l'extension d'une classe existante.

Le rôle de convertir des "données (faciles à gérer par un programme)" en "informations (faciles à comprendre par l'utilisateur)". Pour l'utiliser, installez et utilisez une gemme appelée "draper". Générez des fichiers sous app / décorateurs.

Comment utiliser

  1. Décrivez ce qui suit dans le Gemfile.

gem 'draper'

Exécutez également ceci.


$ budle install
  1. Exécutez la commande suivante pour créer application_decorator.rb.

$ rails generate draper:install
  1. Exécutez la commande suivante pour créer un décorateur.

#les rails génèrent le nom du modèle du décorateur

$ rails generate decorator Article

modèle

app/decorators/article_decorator.rb



class ArticleDecorator < Draper::Decorator
  delegate_all

  def publication_status
    if published?
      "Published at #{published_at.strftime("%A, %B %e")}"
    else
      "Unpublished"
    end
  end
end

Vue

・
・
・
<%= @article.publication_status %>
・
・
・

Conseils

--Accédez à l'instance de modèle


object.published_at.strftime("%A, %B %e")

model.published_at.strftime("%A, %B %e") #le modèle est un alias d'objet

--Délégation de toutes les méthodes


class ArticleDecorator < Draper::Decorator
  delegate_all
end

--Délégation de la méthode spécifiée


class ArticleDecorator < Draper::Decorator
  #Dans le titre, l'objet.Vous pourrez accéder au titre
  delegate :title, :body

  #Déléguer la méthode spécifiée à l'objet spécifié
  delegate :name, :title, to: :author, prefix: true
end

référence

Préparez un décorateur pour afficher la vue Rails pour aider Helper et Modeler

À propos du rôle du décorateur et du drapier

Résumé de l'utilisation de Draper

Recommended Posts

Connaissez-vous Decorator?
Kinx Tiny Compositionetting - La faction LaTeX? Le savez-vous?
Résumé des mots réservés Java inconnus de manière inattendue
Utilisation pratique de Map que vous ne connaissez pas de manière inattendue
Pouvez-vous le faire? Java EE
Quand refactoriser?
Utilisez-vous Stream en Java?
Connaissez-vous Carbon, qui affiche froidement le code source sur Twitter?
Comment écrivez-vous l'opérateur ternaire (? :)
Grammaire Java de base à connaître en premier