Настройка ActiveAdmin CSV - PullRequest
       11

Настройка ActiveAdmin CSV

0 голосов
/ 22 февраля 2019

Я использую Activeadmin и хотел бы экспортировать связанные значения модели в тот же файл CSV.Я могу получить результат, но не в правильном формате.Я хочу, чтобы весь вопрос был именем столбца, и ответ на него должен отображаться в строке.кто-нибудь может мне помочь?

Papplication.rb

ActiveAdmin.register Papplication do
 csv do
  column "Questions" do |papp|
    @questions.map do |question|
      question.question_text
    end
  end
  column "Answers" do |papp|
    @questions = Question.where(:program_id=>papp.program_id)
    @answers = Answer.where(:question_id => @questions.ids,:startup_id => papp.startup_id)
    @questions.map do |question|
        Answer.where(:question_id => question.id, :startup_id => @startup.id).first.answer_text
    end
  end
end

Downloaded csv looks this

Expected Result

1 Ответ

0 голосов
/ 12 марта 2019

Вы можете написать свой собственный код генерации CSV.Вот некоторый код для начала работы:

sidebar :download_as_csv, :only => [:index] do
  a(href: download_as_csv_admin_papplications_path(params.slice(:scope, :filter))) do
    'Download as csv'
  end
end

collection_action :download_as_csv, :method => :get do
  # define your own headers
  csv_headers = ["Question 1", "Answer 1", "Question 2", "Answer 2"] # customize yourself
  rawcsv = CSV.generate(:col_sep => ",") do |csv|
    # here you could add headers
    # csv << csv_headers
    # scoped_collection is provided by activeadmin and takes into account the filtering and scoping of the current collection
    scoped_collection.each do |papplication|
      csv_row = []
      # Create a convenience method in the Papplication model that returns a hash of question_text to answer_text
      papplication.questions2answers_hash.each do |question, answer|
        csv_row << question
        csv_row << answer
      end
      csv << csv_row
    end
  end
  send_data(rawcsv, :type => 'text/csv charset=utf-8; header=present', :filename => Time.now.strftime("%Y%m%e-%H%M%S")) and return
end

Удачи!

...