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 OR self.model = YourModel
def safe_attributes
%i[]
end
def swagger_path
false # => for disable swagger
"/my-custom-path" # => for custom route
end
Instance Method Summary collapse
- #create ⇒ Object
- #destroy ⇒ Object
- #edit ⇒ Object
-
#index ⇒ Object
abstract
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.
- #model_name ⇒ Object
- #new ⇒ Object
- #show ⇒ Object
- #update ⇒ Object
Instance Method Details
#create ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/symphonia/base_controller.rb', line 86 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 |
#destroy ⇒ Object
113 114 115 116 117 118 119 120 |
# File 'lib/symphonia/base_controller.rb', line 113 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 |
#edit ⇒ Object
83 84 |
# File 'lib/symphonia/base_controller.rb', line 83 def edit end |
#index ⇒ Object
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
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/symphonia/base_controller.rb', line 57 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_name ⇒ Object
122 123 124 |
# File 'lib/symphonia/base_controller.rb', line 122 def model_name model.name.demodulize.underscore.to_sym end |
#new ⇒ Object
79 80 81 |
# File 'lib/symphonia/base_controller.rb', line 79 def new @entity ||= instance_variable_set(:"@#{model_name}", model.new(params.fetch(model_name, {}).permit(safe_attributes))) end |
#show ⇒ Object
72 73 74 75 76 77 |
# File 'lib/symphonia/base_controller.rb', line 72 def show respond_to do |format| format.html { @entity = Symphonia::EntityDecorator.new(@entity, view_context) } format.json { render json: @entity } end end |
#update ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/symphonia/base_controller.rb', line 100 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 |