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