Yeni proje oluşturalım, export edeceğimiz bir modele ve içindede biraz veriye ihtiyacımız var.
terminal
$ rails g scaffold lesson name:string teacher:string student_count:integer
$ rake db:migrate
routes.rb
root 'lesson#index'
config/application.rb
require 'csv
controller/lessons_controller.rb
def index
@lessons = Lesson.all.order(:name)
respond_to do |format|
format.html
format.csv {render text: @lessons.to_csv}
end
end
model/lesson.rb
def self.to_csv
CSV.generate do |csv|
csv<<column_names
all.each do |lesson|
csv<< lesson.attributes.values_at(*column_names)
end
end
end
link: localhost:3000/lessons.csv
lesson controllerdaki render text yerine sender_data yazdığımızda direk kaydetme ekranı geliyor, farklı tarayıcı yada ayarlara bağlı olarak hiç sormadanda indirme işlemini yapabilir
csv tamamda excel nasıl kaydedilecek?
initializers/mime_types.rb
Mime::Type.register "application/xls", :xls
lesson_controller.rb/index alttaki komutu ekleyelim
format.xls { send_data @lessons.to_csv(col_sep: "\t")}
lesson.rb deki methodumuzu aşşağıdaki şekilde güncelleyelim
def self.to_csv(options={})
CSV.generate(options) do |csv|
csv<<column_names
all.each do |lesson|
csv<< lesson.attributes.values_at(*column_names)
end
end
end
link: www.localhost:3000/lessons.xls
lesson/index.html.erb
<p>
Downloud:
<%=link_to "csv", lessons_path(format:"csv")%>|
<%=link_to "Excel", lessons_path(format:"xls")%>
</p>
proje dosyası burada..