class Formily::SubmittedDataTable
Helper class for display & convert submitted data
Public Class Methods
new(form, res)
click to toggle source
@param form [Formily:Form] form object @param res [ActiveRecord::Base] related model
# File lib/formily/submitted_data_table.rb, line 8 def initialize(form, res) @form = form @headers = ['related'] + @form.inputs.pluck(:name) + ['date'] @res = res @rows = [] get_data end
Public Instance Methods
headers()
click to toggle source
# File lib/formily/submitted_data_table.rb, line 16 def headers @headers end
rows()
click to toggle source
# File lib/formily/submitted_data_table.rb, line 20 def rows @rows end
to_csv()
click to toggle source
# File lib/formily/submitted_data_table.rb, line 24 def to_csv CSV.generate do |csv| csv << (['index'] + @headers) @rows.each_with_index do |row, i| arr = ([i + 1] + row) csv << arr end end end
Private Instance Methods
get_data()
click to toggle source
# File lib/formily/submitted_data_table.rb, line 36 def get_data submits = @form.submits.includes(input_values: [{input: [:inputs, :group_input]}, :attach]) submits = submits.where(resource_id: @res.id, resource_type: @res.class.name) if @res.present? submits.each do |s| row = [] tmp = s.input_values.map do |i| if i.input.group_input_id {n: i.input.group_input.name, v: i.get_value} rescue {n: '', v: ''} else {n: i.input.name, v: i.get_value} rescue {n: '', v: ''} end end row << "#{s.resource_id}##{s.resource_type}" @headers[1..-2].each do |name| q = tmp.select{|x| x[:n] == name} if q.present? if q.length > 1 row << q.map{|q1| q1[:v]}.join(', ') else row << q.first[:v] end else row << 'no data' end end row << s.created_at.strftime('%Y/%-m/%-d %H:%M (%Z)') @rows << row end end