Экспорт записи в CSV

У меня есть таблица сообщений в моем приложении Rails 3.0.10. Я хочу дать своим пользователям возможность экспортировать определенную запись Post в формат CSV, а не все сразу. И хотя в моей таблице Post много полей, я хочу экспортировать только заголовок и тело.

После некоторого поиска, очевидно, лучший способ сделать это через FasterCSV. И, по-видимому, он уже встроен в Ruby 1.9.2, который я использую. Дело в том, что почти все учебники устарели (от Rails 1 или 2), и я совершенно не знаю, как это сделать.

Я пытался вставить свой posts_controller.rb

def export_to_csv 
  @post = Post.find(params[:id])
     csv_string = CSV.generate do |csv| 
    csv << [@post.title, @post.body] 
  end 

# send it to the browsah
send_data csv_string, 
          :type => 'text/csv; charset=iso-8859-1; header=present', 
          :disposition => "attachment; filename=post.csv" 
end

Который, как я ДУМАЮ, может быть правильным кодом, но я понятия не имею, как его использовать, на мой взгляд. В идеале я хочу иметь ссылку для экспорта файла CSV, но я думаю, что это нужно сделать через form_tag?

Был бы признателен, если бы кто-нибудь мог указать мне правильное направление. Спасибо.


person cdotfeli    schedule 02.01.2012    source источник
comment
может быть, эта ссылка может помочь вам stackoverflow.com/questions/94502/   -  person Pritesh Jain    schedule 02.01.2012
comment
Разобрался после очередного часа поисков и экспериментов. Опубликую решение, как только смогу.   -  person cdotfeli    schedule 02.01.2012


Ответы (1)


После нескольких часов гугления и экспериментов я нашел ответ.

1.) Установите этот гем: https://github.com/dasil003/csv_builder

2.) Добавьте respond_to do |format| format.csv к действию, которое вы хотите преобразовать в CSV (в моем случае часть def show в posts_controller

3.) Создайте файл action.csv.csvbuilder (в моем случае show.csv.csvbuilder) и добавьте нужные вам данные (в моем случае добавьте csv << [@post.title, @post.body])

4.) Добавьте ссылку на CSV в представлениях.

person cdotfeli    schedule 03.01.2012