Создать CSV-файл из рельсов - PullRequest
11 голосов
/ 18 марта 2010

Я читал похожие вопросы, но многие ответы устарели или недостаточно ясны для меня.

Я бы хотел иметь возможность сделать что-то вроде (в действии контроллера):

respond_to do |format|
  format.html
  format.csv
end

Я знаю, что тогда мне понадобится представление, такое как action.csv.erb


Итак, мои вопросы:

1) Что мне нужно настроить в рельсах, чтобы это вообще происходило.

2) Как настроитьпредставление CSV для отображения некоторых базовых полей из модели?

ОБНОВЛЕНИЕ:

Итак, я попытался пройти путь запятой, я установил и продал драгоценный камень,

Затем, согласно прочитанному мной, я бросил это в свою модель (настроенную под мои нужды):

comma do

user_id 'User'
created_at 'Date'
name 'Name'
end

Затем я бросил это в элемент управления для действия индекса (согласноreadme):

  format.csv { render :csv => MyModel.limited(50) }

Затем при доступе к индексу (не в формате CSV) я получаю следующую ошибку исключения ActionController:

неопределенный метод `запятая 'для

Итак, я гуглил это, и я прочитал, что в моей модели я должен добавить «запятую».

После этого я обновился (страница моего локального индекса)и ошибка изменилась на:

нет такого файла для загрузки - запятая

Так что в этот момент я решил, что он не должен явно находить файлы запятых.Поэтому я скопировал файлы из запятой папки с гемами из папки lib запятой в папку rails lib.Затем я обновил страницу и обнаружил эту ошибку:

неинициализированная константа Ошибка

Затем я почти сдался.

Ошибки трассировки:

/ Users / elliot / .gem / ruby ​​/ 1.8 / gems / activesupport-2.3.5 / lib / active_support / dependencies.rb:443: в load_missing_constant' /Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:80:in const_missing '/Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:92:in `const_missing'

Другие заметки, я уже установил FasterCSV

Надеюсь, хватит информации:)

Ответы [ 4 ]

11 голосов
/ 18 марта 2010

Предлагаю взглянуть на запятую . Он работает очень хорошо и позволяет обрабатывать вещи на уровне модели, а не на уровне просмотра.

6 голосов
/ 19 марта 2010

Посмотрите на FasterCSV.

csv_string = FasterCSV.generate do |csv|

  cols = ["column one", "column two", "column three"]

  csv << cols

  @entries.each do |entry|                
    csv << [entry.column_one, entry.column_two, entry.column_three ]
  end

  filename = "data-#{Time.now.to_date.to_s}.csv"    

end

send_data(csv_string, :type => 'text/csv; charset=utf-8; header=present', :filename => filename)  
3 голосов
/ 13 января 2011

Это ужасно, но библиотека CSV (в 1.9, == FasterCSV) не будет хорошо работать с meta_where, поэтому я сделал это так:

@customers.collect {|c| lines.push ["#{c.lastname}","#{c.firstname}","#{c.id}","#{c.type}"}
lines = lines.collect {|line| line.join(',')}
csv_string = lines.join("\n")  
respond_to do |format|
  format.html
  format.csv { send_data(csv_string, :filename => "#{@plan.name.camelize}.csv", :type => "text/csv") }
end

Это уродливо, но эффективно.

0 голосов
/ 25 июля 2012

Посмотрите на CSV Shaper.

https://github.com/paulspringett/csv_shaper

Он имеет хороший DSL и отлично работает с моделями Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...