Module: Symphonia::BaseController

Extended by:
ActiveSupport::Concern
Included in:
BaseController, RolesController
Defined in:
lib/symphonia/base_controller.rb

Overview

General controller for CRUD operations of Entity

How to use: include Symphonia::BaseController def model

YourModel

end

Instance Method Summary collapse

Instance Method Details

#createObject



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/symphonia/base_controller.rb', line 73

def create
  @entity ||= instance_variable_set(:"@#{model_name}", model.new(entity_params))
  respond_to do |format|
    if @entity.save
      after_create
      format.html { redirect_back_or_default @entity, notice: t(:text_created) }
      format.json { render json: @entity, status: :created, location: @entity }
    else
      format.html { render action: 'new' }
      format.json { render status: :unprocessable_entity, json: { errors: @entity.errors } }
    end
  end
end

#destroyObject



100
101
102
103
104
105
106
107
# File 'lib/symphonia/base_controller.rb', line 100

def destroy
  @entity.destroy
  respond_to do |format|
    format.html { redirect_back_or_default(polymorphic_path(model), notice: t(:text_destroyed)) }
    format.json { head :no_content }
    format.js { render js: "Symphonia.filters.removeRow('#{view_context.dom_id(@entity)}')" }
  end
end

#editObject



70
71
# File 'lib/symphonia/base_controller.rb', line 70

def edit
end

#indexObject

This method is abstract.

model

def model

self.class.model

end by default it guess from class name of controller def model

@model ||= self.class.name.remove("Controller").classify.constantize

end



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/symphonia/base_controller.rb', line 44

def index
  @query ||= model.query.new
  @query.from_params params
  @entities = @query.entities
  respond_to do |format|
    format.html do
      @entities = paginate(@entities)
      render layout: !request.xhr?
    end
    format.json do
      paginate(json: @entities)
    end
  end
end

#model_nameObject



109
110
111
# File 'lib/symphonia/base_controller.rb', line 109

def model_name
  model.name.demodulize.underscore.to_sym
end

#newObject



66
67
68
# File 'lib/symphonia/base_controller.rb', line 66

def new
  @entity ||= instance_variable_set(:"@#{model_name}", model.new(params.fetch(model_name, {}).permit(safe_attributes)))
end

#showObject



59
60
61
62
63
64
# File 'lib/symphonia/base_controller.rb', line 59

def show
  respond_to do |format|
    format.html { @entity = Symphonia::EntityDecorator.new(@entity, view_context) }
    format.json { render json: @entity }
  end
end

#updateObject



87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/symphonia/base_controller.rb', line 87

def update
  respond_to do |format|
    if @entity.update(entity_params)
      after_update
      format.html { redirect_back_or_default @entity, notice: t(:text_updated) }
      format.json { head :no_content }
    else
      format.html { render action: 'edit' }
      format.json { render status: :unprocessable_entity, json: { errors: @entity.errors } }
    end
  end
end