ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Das Postmodell verfügt über Titel- und Körperspalten Es besteht eine N: 1-Beziehung zum Benutzermodell.
Schreiben Sie zuerst den fertigen Code und dann den Zusatzcode
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(Name des Mitwirkenden Titelkörper)
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: "Beitragsliste.csv")
end
end
view
erb:app/views/posts/new.html.erb
<%= link_to "Ausgabe mit csv",new_post_path(format: :csv) %>
controller
app/controllers/posts_controller.rb
class PostsController < ApplicationController
require 'csv' #← Sei vorsichtig, denn es ist leicht zu vergessen
def new
@post = Post.new
@posts = Post.all
# respond_to ist eine Methode, die die Verarbeitung gemäß der Anforderung ausführt.
#Normalerweise wird HTML angefordert, daher wird der Prozess nicht beschrieben.
#Link anzeigen_Da das Format als csv mit to angegeben ist,
#Drücken Sie den Link zum Senden_posts_csv(@posts)Wird verarbeitet.
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 ist eine Art CSV-Bibliothek, die Zieldaten automatisch in das CSV-Format konvertiert.
csv_data = CSV.generate do |csv|
# %w()Gibt ein durch Leerzeichen getrenntes Array zurück
column_names = %w(Name des Mitwirkenden Titelkörper)
# csv << column_names definiert die Namen, die in die Spalten der Tabelle aufgenommen werden.
csv << column_names
# column_Definiert die Spaltenwerte, die den Werten zugewiesen werden sollen.
posts.each do |post|
column_values = [
post.user.name,
post.title,
post.body,
]
# csv << column_valuesh definiert die Werte, die in die Zeilen der Tabelle eingehen.
csv << column_values
end
end
#Definiert den Dateinamen für die CSV-Ausgabe.
send_data(csv_data, filename: "Beitragsliste.csv")
end
end
view
erb:app/views/posts/new.html.erb
<!--Geben Sie das Format als CSV an und antworten Sie dem Controller_Zur Verarbeitung ausführen-->
<%= link_to "Ausgabe mit csv",new_post_path(format: :csv) %>
Recommended Posts