Как экспортировать данные таблицы в виде файла CSV в Ruby 1.9.2 + Rails3? - PullRequest
1 голос
/ 17 ноября 2010

Я студент, который в настоящее время зарегистрирован в программе информационных технологий и получил проект, который требует от меня и моей команды создания динамического конструктора форм с использованием Rails 3 + Ruby 1.9.2.Ключевой особенностью этого динамического конструктора форм является то, что пользователи могут экспортировать результаты своей формы.У меня не было большого успеха в реализации функции CSV с использованием класса CSV, определенного в Ruby 1.9+ API.Я определяю функцию «экспорта» в контроллере form_results и в настоящее время просто пытаюсь записать в файл CSV.Моя функция экспорта выглядит следующим образом:

def export
 CSV.open("/public/results/results.csv", "wb") do |csv|
   csv << ["sample", "data"]
 end
end

И в представлении, я ссылаюсь на функцию с помощью:

<%= link_to 'Download CSV', form_form_results_path(@form), :method => :export %>

Я чувствую, что если я могу получить реализацию CSVкласс работает правильно, я смогу добить остальную логику без каких-либо серьезных проблем.Будем весьма благодарны за любые рекомендации, комментарии или помощь.

Спасибо,

Маз М.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Использование параметра :method неверно. Это следует использовать для указания http глаголов. Документация здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

Я бы предложил использовать блок respond_to в действии, когда они просматривают динамическую форму, и использовать format.csv. Это позволяет вам использовать то же действие, но отображать результаты в другом формате, просто вызывая URL-адрес действия с добавлением .csv к URL-адресу

respond_to do |format|
  format.html
  format.csv { render :text => @dynamic_form.to_csv} #this will return txt in browser
  #format.csv { render :csv => @dynamic_form.to_csv} #with mime type (should prompt browser download)
end

Затем в вашей модели формы вы можете создать определение to_csv, которое будет отрисовывать CSV и возвращать его в виде строки. Вы действительно не должны помещать какую-либо логику в свой контроллер. Контроллеры предназначены для создания переменных экземпляра (где логика создания должна выполняться в моделях) и пересылки в соответствующие представления. Модель должна содержать основную часть вашей логики. Google "тощие контроллеры, толстые модели" для получения дополнительной информации об этом.

def to_csv
  csv = some_logic_here_to_create_csv_string
  csv
end

Ваш вызов link_to, вероятно, выглядел бы так (просто записал это на макушке головы. Не могу вспомнить, правильный ли это синтаксис):

<%= link_to 'Download CSV', form_form_results_path(@form, :format=>:csv) %>
1 голос
/ 14 апреля 2015

Вы должны ссылаться на эту ссылку. Этот эпизод Railscast объясняет экспорт данных в формате CSV или XLS. Вы также можете сослаться на эту ссылку.

...