Module: Admin::EditableColumns

Extended by:
ActiveSupport::Concern
Includes:
AlertsHelper
Defined in:
app/controllers/concerns/admin/editable_columns.rb

Instance Method Summary collapse

Methods included from AlertsHelper

#flash_danger_messages, #flash_messages, #flash_success_messages, #flash_warning_messages, #render_alert

Instance Method Details

#column_paramsObject



51
52
53
# File 'app/controllers/concerns/admin/editable_columns.rb', line 51

def column_params
  sanitize_params(params.require(:item).permit!)
end

#column_partial(operation) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/controllers/concerns/admin/editable_columns.rb', line 34

def column_partial(operation)
  column = params[:column]

  return "#{operation}_#{column}" if params[:custom].presence

  # TODO (vl): refactor this
  if controller_model.respond_to?(:enumerized_attributes) && controller_model.enumerized_attributes[column]
    type = :enumerize
  else
    columns_info = controller_model.columns.index_by(&:name).with_indifferent_access
    type = columns_info[column].type
    type = :string if %i(integer float decimal).include?(type)
  end

  "admin/editable_columns/#{operation}/#{type}"
end

#controller_modelObject



30
31
32
# File 'app/controllers/concerns/admin/editable_columns.rb', line 30

def controller_model
  controller_name.singularize.camelize.constantize
end

#edit_columnObject



10
11
12
13
14
# File 'app/controllers/concerns/admin/editable_columns.rb', line 10

def edit_column
  item = controller_model.find(params[:id])
  form = render_to_string('admin/editable_columns/edit_column', locals: {item: item, column_partial: column_partial(:edit), options: OpenStruct.new(params)}, layout: false)
  render json: {form: form}
end

#update_columnObject



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/controllers/concerns/admin/editable_columns.rb', line 16

def update_column
  item = controller_model.find(params[:id])

  unless item.update(column_params)
    messages = item.errors.full_messages.join("</br>")
    alert = render_alert(messages, :danger)
    render json: {alert: alert}
    return
  end

  result = render_to_string(partial: column_partial(:result), locals: {item: item, options: OpenStruct.new(params)})
  render json: {result: result}
end