Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Web

Экспорт данные в формате CSV в приложении Ruby on Rails 2.xx/Active_Scaffold

2018-03-09 06:15:16







Периодически в разного рода админ-интерфейсах требуется возможность перенос данных в формате Excel.Здесь мы увидим, как это реализовать на практике в Rails проекте, использующий plugin Active_Scaffold (www.activescaffold.com).Допустим, нам необходимо экспортировать данные об зарегистрированных в системе пользователях.

1. В начале нам нужно отредактировать файл модели User(app/models/user.rb), поместив туда 2 новых метода:

def self.csv_header
"ID,Last Name,First Name, Email,Phone"
end
def to_csv
id.to_s << "," << last_name << "," << first_name << "," << email << "," << phone.to_s
end

Первый метод формирует заголовок необходимого типа и формата, а второй конвертирует в строки полученные данные.

2.Затем мы добавляем ссылку на вновь созданный метод «expot_csv» контроллера в файле класса контроллера (app./controllers/user_controller.rb), поместив его в настройки pluginа Active_Scaffold в этом файле:

active_scaffold (:user) do |config|
config.columns = [:id, :first_name, :last_name, :login, :email, :address,:city,:state, :country, :zip,:phone, :fax, :created_at]
config.list.per_page = 10
config.action_links.add 'export_csv', :label => 'Export to Excel', :page => true
list.sorting = {:last_name => 'ASC'}
end

3.Там же описываем новый метод, который получает данные из pluginа Active_Scaffold и генерирует файл типа:

def export_csv
records = find_page().items
return if records.size == 0
data = ""
cls = records[0].class
data << cls.csv_header << "\r\n"
records.each do |inst|
data << inst.to_csv << "\r\n"
end
send_data data, :type => 'text/csv', :filename => cls.name.pluralize + '.csv'
end

4. И наконец, очень важный заключительный шаг. Без этого экспорт данных не сможет работать.
В файл роутера (app/config/router.rb) перед map.resource
вставляем такую строку:

map.connect 'user/export_csv', :controller => 'user', :action =>'export_csv'

Это все.

Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика