ben

OMÜ , Bilgisayar Mühendisliği, 13'

15 Aralık 2015 Salı

export csv / excel


   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'

modelimize veri eklediğimize göre gelelim bu verileri csv dosyasına yada excel dosyasından indirebilelim.

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..