2014-12-03 54 views
5

這是ActiveAdmin 0.4.3。我們的應用程序運行調查,可能有任意數量的SurveyQuestions。當用戶填寫調查時,會創建一個UserSurveyComment實例,其中每個調查問卷都有一個SurveyComments。導出ActiveAdmin CSV中的動態列數

這樣做的結果是,對於任何給定的調查,所有UserSurveyComment實例將具有相同數量的SurveyComments,但在調查之間,此數字可能會有所不同。

是否有可能爲ActiveAdmin CSV出口來處理這樣UserSurveyComments,使得存在對於用戶列,調查,然後每個SurveyComment反過來?導出的範圍是Survey,所以每行都有相同的列,但特定的導出可能有不同的數字。

我想什麼做的是一樣的東西

survey.survey_questions.each do |sq| 
    column "Question" { |q| q.survey_comments.where(survey_question_id: sq.id).first.submitted_text } 
end 

...但ActiveAdmin.CSVBuilder實例中,似乎沒有要達到調查的方式。

也許我更容易在我自己的控制器中做到這一點?

+0

我會離開這個問題打開,但最終我做我自己的控制器定製的CSV導出,並留下了ActiveAdmin。 – pjmorse 2014-12-10 15:04:42

回答

2

我理解你的模式是相似的

class Survey < ActiveRecord::Base 
    has_many :user_survey_comments 
    has_many :survey_questions 
end 

class SurveyQuestion < ActiveRecord::Base 

    attr_accessor :name 

    belongs_to :survey 
    has_many :survey_comments 
end 

class UserSurveyComments < ActiveRecord::Base 
    belongs_to :survey 
    has_many :survey_comments 
end 

class SurveyComments < ActiveRecord::Base 

    attr_accessor :content 

    belongs_to :user_survey_comments 
    belongs_to :survey_question 
end 

裏面csv塊,@collection包含過濾輸出對象的列表。在配置上則可以按照如下類似的方式註冊UserSurveyComment

ActiveAdmin.register UserSurveyComment do 
    csv do 

    column(:survey) 

    visited_surveys = Set[] 

    @collection.each do |user_survey_comment| 

     next if visited_surveys.include?(user_survey_comment.survey) 
     visited_surveys.add(user_survey_comment.survey) 

     user_survey_comment.survey.survey_questions do |question| 
     column(question.name) do |user_survey_comment| 
      user_survey_comment 
      .survey_comments 
      .find_by(survey_question_id=question.id) 
      .try(:response){''} 
     end 
     end 
    end 
    end 
end