Module: TentSteakFeatures::TableController
- Defined in:
- lib/tent_steak/table.rb
Overview
TentSteak controller methods for :table feature. Provides a helper method to extract changed fields from a POSTed table form.
Instance Method Summary collapse
-
#extract_form_fields(field_hash, form_prefix = "TS", selected_only = false) ⇒ Object
Extract changed field values from a POSTed form table; the counterpart to #tablerow() options
:text_columnsand:select_columns.
Instance Method Details
#extract_form_fields(field_hash, form_prefix = "TS", selected_only = false) ⇒ Object
Extract changed field values from a POSTed form table; the counterpart to #tablerow() options :text_columns and :select_columns. field_hash can be @input from the POST. The POST field values are filtered according to the :form_prefix passed to #tablerow().
selected_only determines whether or not to filter entire rows according to whether the leading select checkbox is checked (see :select_row). By default, the select checkbox is ignored. You should only set selected_only to true for tables with :select_row set.
702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 |
# File 'lib/tent_steak/table.rb', line 702 def extract_form_fields(field_hash, form_prefix = "TS", selected_only = false) changed = {} # Reject fields that don't start with form_prefix, or that are 'ts_selected' indicators. # We'll handle ts_selected in selected_fields below. form_fields = field_hash.reject { |key, value| (key =~ /^#{form_prefix}/).nil? || key =~ /ts_selected$/ } # Ignore fields not selected (see #tablerow option :select_row). selected_fields = field_hash.reject { |key, value| (key =~ /^#{form_prefix}__.*__ts_selected$/).nil? }.keys.map { |key| key.split('__')[1] } if selected_only form_fields.each do |key, value| prefix, row_key, field_name, old_value = key.split('__') # Skip fields that didn't change or aren't selected. next if form_fields[key] == old_value || (selected_only && !selected_fields.include?(row_key)) (changed[row_key] ||= {})[field_name] = value end changed end |