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
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/symphonia/base_controller.rb', line 85 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
112 113 114 115 116 117 118 119 |
# File 'lib/symphonia/base_controller.rb', line 112 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
82 83 |
# File 'lib/symphonia/base_controller.rb', line 82 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
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/symphonia/base_controller.rb', line 56 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
121 122 123 |
# File 'lib/symphonia/base_controller.rb', line 121 def model_name model.name.demodulize.underscore.to_sym end |
#new ⇒ Object
78 79 80 |
# File 'lib/symphonia/base_controller.rb', line 78 def new @entity ||= instance_variable_set(:"@#{model_name}", model.new(params.fetch(model_name, {}).permit(safe_attributes))) end |
#show ⇒ Object
71 72 73 74 75 76 |
# File 'lib/symphonia/base_controller.rb', line 71 def show respond_to do |format| format.html { @entity = Symphonia::EntityDecorator.new(@entity, view_context) } format.json { render json: @entity } end end |
#update ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/symphonia/base_controller.rb', line 99 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 |