Skip to content

Instantly share code, notes, and snippets.

View 105ron's full-sized avatar

Rhys B 105ron

View GitHub Profile
@105ron
105ron / index.xlsx.axlsx
Created December 5, 2016 10:16
Saving a file to xlsx in Rails
wb = xlsx_package.workbook
wb.add_worksheet(name: "Student") do |sheet|
title = wb.styles.add_style(b: true, bg_color: "395870", fg_color: "FFFFFF",
alignment: {horizontal: :center})
sheet.add_row ["ID", "Name", "Date of Birth", "Email",
"School", "School Address"], style: title
@students.each do |student|
sheet.add_row [student.id, student.full_name, student.DOB, student.email,
student.school_name, student.school_address]
end
@105ron
105ron / students_controller2.rb
Created December 5, 2016 10:06
Students controller with format.xlsx
[...]
def index
@students = Student.all_with_school_details
respond_to do |format|
format.html
format.csv { send_data @students.as_csv }
format.xlsx
end
@105ron
105ron / Gemfile
Created December 5, 2016 09:50
Gemfile for Rails to include axlsx_rails
source 'https://rubygems.org'
# Use axlsx to create spreadsheets
gem 'rubyzip', '~> 1.1.0'
gem 'axlsx', '2.1.0.pre'
gem 'axlsx_rails'
@105ron
105ron / index.html.erb
Created December 5, 2016 08:44
Creating a link for csv format
[...]
<%= link_to "Export CSV", students_path(format: :csv) %>
[...]
@105ron
105ron / students_controller.rb
Created December 5, 2016 08:34
Making students#index respond to .csv
def index
@students = Student.all_with_school_details
respond_to do |format|
format.html
format.csv { send_data @students.as_csv }
end
@105ron
105ron / rake_routes.rb
Created December 5, 2016 08:30
A line from our routes.
students GET /students(.:format) students#index
@105ron
105ron / Student.rb
Created December 5, 2016 08:04
Method to convert to CSV
[...]
def self.as_csv
CSV.generate do |csv|
columns = %w(id first_name last_name DOB school_name school_address)
csv << columns.map(&:humanize)
all_with_school_details.each do |student|
csv << student.attributes.values_at(*columns)
end
end
@105ron
105ron / rails_console_2.rb
Created December 5, 2016 06:54
ActiveRecord results
Student.all_with_school_details.first.school_name
=> "Springfield Elementary School"
@105ron
105ron / rails_console.rb
Created December 5, 2016 06:45
Result of all_with_school_details method
Student.all_with_school_details.first
=> #<Student:0x007f9c26baa580
id: 1,
first_name: "Bart",
last_name: "Simpson",
DOB: Sun, 17 Dec 1989,
email: "bart@the-simpsons.com",
created_at: Sun, 04 Dec 2016 06:26:52 UTC +00:00,
updated_at: Sun, 04 Dec 2016 06:26:52 UTC +00:00,
@105ron
105ron / Student.rb
Created December 5, 2016 06:38
Create join between two models
require 'csv'
class Student < ApplicationRecord
belongs_to :school
[...]
def self.all_with_school_details
Student.select("students.*, schools.name as school_name, schools.address as school_address").joins(:school)