这是ActiveAdmin 0.4.3。我们的应用程序运行Surveys,它可能有任意数量的SurveyQuestions。当用户填写调查时,会创建一个UserSurveyComment实例,其中has_many
SurveyComments,每个调查的SurveyQuestions一个。
结果是,对于任何给定的调查,所有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 :(得分: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