Rails маршрут для нересурсов для CSV - PullRequest
1 голос
/ 27 ноября 2010

У меня есть метод, называемый "revisions", и я хочу иметь возможность использовать ту же логику, но вывод в CSV Я думаю, что я хотел бы использовать драгоценный камень FasterCSV. Что мне нужно, это то, что добавить к моим маршрутам, чтобы получить маршрут для вывода html и csv. Я хотел бы, чтобы мои URL были примерно такими:

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

Мысли

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

Ответы [ 2 ]

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

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

Сначала настройте маршрут в маршрутах. 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 голосов
/ 27 ноября 2010

В вашем route.rb:

resources :photos do
  get 'preview', :on => :member
end

http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

И в вашем контроллере обработайте формат с помощью response_to.

...