2010-11-27 2 views
1

У меня есть метод под названием «ревизии», и я хочу, чтобы иметь возможность использовать ту же логику, но выводить на csv. Я думаю, что хотел бы использовать драгоценный камень FasterCSV. Мне нужно, чтобы добавить мои маршруты, чтобы получить маршрут как для html, так и для выходов csv. Я бы хотел, чтобы мои URL-адреса были примерно такими:Rails-маршрут для нересурсов для csv

invoices/51/revisions 
invoices/51/revisions.csv 

Мысли?

Спасибо большое!

ответ

2

Rails делает это очень просто. Вам вообще не нужно менять маршруты, чтобы соответствовать CSV-формату, так как рельсы распознают MIME-тип csv.

Во-первых, установить маршрут в routes.rb:

map.invoice_revisions 'invoices/:id/revisions.:format', 
         :controller=>:invoices, 
         :action=>:revisions 

В контроллере, сделать что-то вроде этого:

def revisions 
    # ... set @revisions with something like 
    @revisions = Invoice.find(params[:id]).revisions 

    respond_to do |format| 
    format.html # will render the revisions html template 
    format.csv { render :csv => revisions_csv } # see sample method below 
    end 
    end 
end 

private 
    def revisions_csv # convert @revisions to csv: customize to your needs 
    FasterCSV.generate do |csv| 
     csv << @revisions.first.attributes.keys # set the headers 
     @revisions.each do |revision|   # set the data 
     csv << revision.attributes.values 
     end 
    end 
    end 

Вот учебник с более подробной информацией о форматировании файлов CSV используя csvbuilder:

http://rubyglasses.blogspot.com/2009/07/csv-views-with-fastercsv-and-csvbuilder.html

+0

Даже с reply_to там я получаю: Не удалось найти WorkOrder с ID = изменения – 2010-11-28 08:17:40

+0

Посмотрите еще раз на обновленный ответ. Я добавил информацию о настройке маршрутов. Я предположил, что у вас уже установлен маршрут для html-версии представления. – bowsersenior 2010-11-28 08:42:30