[Ruby on Rails] Fonction de sortie CSV

Cible

CSV.gif

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

supposition

Le modèle d'article a des colonnes de titre et de corps Il existe une relation N: 1 avec le modèle utilisateur.

Écrivez d'abord le code complété, puis écrivez le code supplémentaire

Code d'achèvement

Contrôleur d'édition

app/controllers/posts_controller.rb


class PostsController < ApplicationController
  require 'csv'

  def new
    @post = Post.new
    @posts = Post.all
    respond_to do |format|
      format.html
      format.csv do |csv|
        send_posts_csv(@posts)
      end
    end
  end

  private
  def send_posts_csv(posts)
    csv_data = CSV.generate do |csv|
      column_names = %w(Nom du contributeur Titre Corps)
      csv << column_names
      posts.each do |post|
        column_values = [
          post.user.name,
          post.title,
          post.body,
        ]
        csv << column_values
      end
    end
    send_data(csv_data, filename: "Liste des messages.csv")
  end
end

view

erb:app/views/posts/new.html.erb


<%= link_to "Sortie avec csv",new_post_path(format: :csv) %>

Code supplémentaire

controller

app/controllers/posts_controller.rb


class PostsController < ApplicationController
  require 'csv' #← Attention car c'est facile à oublier

  def new
    @post = Post.new
    @posts = Post.all
    # respond_to est une méthode qui effectue le traitement en fonction de la demande.
    #Normalement, html est demandé, donc le processus n'est pas décrit.
    #voir le lien_Puisque le format est spécifié comme csv avec to,
    #Appuyez sur le lien pour envoyer_posts_csv(@posts)Est traité.
    respond_to do |format|
      format.html
      format.csv do |csv|
        send_posts_csv(@posts)
      end
    end
  end

  private
  def send_posts_csv(posts)
    # CSV.generate est un type de bibliothèque CSV qui convertit automatiquement les données cibles au format CSV.
    csv_data = CSV.generate do |csv|
      # %w()Renvoie un tableau séparé par des espaces
      column_names = %w(Nom du contributeur Titre Corps)
      # csv << column_names définit les noms qui entrent dans les colonnes de la table.
      csv << column_names
      # column_Définit les valeurs de colonne à affecter aux valeurs.
      posts.each do |post|
        column_values = [
          post.user.name,
          post.title,
          post.body,
				]
      # csv << column_valuesh définit les valeurs qui entrent dans les lignes de la table.
        csv << column_values
      end
    end
    #Définit le nom de fichier pour la sortie csv.
    send_data(csv_data, filename: "Liste des messages.csv")
  end
end

view

erb:app/views/posts/new.html.erb


<!--Spécifiez le format comme csv et répondez au contrôleur_Exécuter jusqu'au traitement-->
<%= link_to "Sortie avec csv",new_post_path(format: :csv) %>

Recommended Posts

[Ruby on Rails] Fonction de sortie CSV
[Ruby on Rails] Introduction de la fonction de pagination
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
[Ruby on Rails] Fonction de recherche (non sélectionnée)
[Rails] Ajout de la fonction de commentaire Ruby On Rails
[Ruby on Rails] Suivez l'implémentation de la fonction: bidirectionnelle
[Ruby on rails] Implémentation d'une fonction similaire
[Ruby on Rails] Suppression logique (fonction de retrait)
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
Paramètres de validation pour la fonction de connexion Ruby on Rails
Implémentation de la fonction de connexion Ruby on Rails (Session)
Ruby on Rails Implémentation de la fonction d'envoi automatique de courrier
[Ruby on Rails] Fonction de post-édition (mise à jour, suppression)
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
Record d'apprentissage de Ruby on rails -2020.10.06
Routes de rails de sortie en tant que csv
Résumé de la validation Ruby on Rails
Mémorandum de base Ruby on Rails
[Ruby on Rails] Communication asynchrone de la fonction de publication, ajax
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Ruby on Rails] Fonction de classement des scores (affichage complet)
[Ruby on Rails] Fonction de prévisualisation de l'image dans le fichier
[Ruby on Rails] Fonction de recherche (modèle, formule de sélection de méthode)
[Rails] Implémentation de la fonction d'importation CSV
[Ruby on Rails] Read try (: [] ,: key)
Variables Ruby on Rails, résumé constant
Installation de Ruby + Rails sur Ubuntu 18.04 (rbenv)
Ruby on Rails Paramètre de la fonction d'envoi automatique des e-mails (avec Gmail)
[Ruby on Rails] Fonction de signet (enregistrement favori, comme): une direction
Connaissance de base de Ruby on Rails
Progatez Ruby on Rails
Comment utiliser Ruby on Rails
[Rails] Implémentation de la fonction d'exportation CSV
(Ruby on Rails6) "Effacer" le contenu publié
Une note sur la fonction de départ de Ruby on Rails
Mémo de construction de l'environnement Ruby on Rails 6.0
[Ruby on Rails] Création de la page de confirmation
[Ruby on Rails] Implémenter la fonction de connexion par add_token_to_users avec l'API
Ruby On Rails conçoit un conflit de routage
Implémenter la fonction de téléchargement CSV dans Rails
[Ruby on Rails] Méthode d'aide pratique
[Ruby on Rails] Arrêtez de "boucler jusqu'à ce que ..."