rails_csv_renderer
Custom CSV renderer for ActiveRecord collections
Installation
Add this line to your application's Gemfile:
gem 'rails_csv_renderer'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rails_csv_renderer
Usage
The rails_csv_renderer allows you to render any collection as CSV data. Result CSV includes all columns of model with localized column's names
class ReportsController < ApplicationController
def index
@reports = Report.all
respond_to do |format|
format.csv { render csv: @reports }
end
end
end
Will render a CSV file similar to:
Title | Content | Created at | Updated at |
---|---|---|---|
House report | Report about house devices | 2014-07-14 01:00:42 UTC | 2014-07-14 01:00:42 UTC |
Work report | Report about work devices | 2014-07-14 12:42:42 UTC | 2014-07-14 12:42:42 UTC |
Options
You can pass few options at call of rendrer:
- :filename - Name of file. Optional
- :csv_options - Options for CSV generator. Availible options. Optional
- :columns - Array of variables and methods. Title of columns will be created based on your translations. In this case you should not define methods in model. Optional
Example
class ReportsController < ApplicationController
def index
@reports = Report.all
respond_to do |format|
format.csv { render csv: @reports, filename: 'custom-reports.csv', csv_options: { col_sep: '\t' }, columns: [:created_at, :title] }
end
end
end
Localize column's names
If you have translations for model's attributes under scope [:activerecord, :attributes, *model_name*] names of columns will be automatically translated.
Customize CSV
To customize your CSV file with different methods and name of columns you should add next methods to model csv_header(class method), csv_row.
-
csv_header should return array with column's titles.
-
csv_row should return array with values for columns.
class Cat < ActiveRecord::Base
def self.csv_header
["ID", "Cat's name"]
end
def csv_row
[id, name]
end
end
Contributing
- Fork it ( https://github.com/[my-github-username]/rails_csv_renderer/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request