# rails_csv_renderer [](https://travis-ci.org/den-sheleh/rails_csv_renderer) [](https://codeclimate.com/github/den-sheleh/rails_csv_renderer) [](http://badge.fury.io/rb/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 ```ruby 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: <table> <tr> <th>Title</th><th>Content</th><th>Created at</th><th>Updated at</th> </tr> <tr> <td>House report</td><td>Report about house devices</td><td>2014-07-14 01:00:42 UTC</td><td>2014-07-14 01:00:42 UTC</td> </tr> <tr> <td>Work report</td><td>Report about work devices</td><td>2014-07-14 12:42:42 UTC</td><td>2014-07-14 12:42:42 UTC</td> </tr> </table> ### Options You can pass few options at call of rendrer: * *:filename* - Name of file. Optional * *:csv_options* - Options for CSV generator. [Availible options](http://www.ruby-doc.org/stdlib-2.1.2/libdoc/csv/rdoc/CSV.html#method-c-new). 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 ```ruby 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. ```ruby class Cat < ActiveRecord::Base def self.csv_header ["ID", "Cat's name"] end def csv_row [id, name] end end ``` ## Contributing 1. Fork it ( https://github.com/[my-github-username]/rails_csv_renderer/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new Pull Request