
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
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
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) %>
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