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
- #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
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 |
#destroy ⇒ Object
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 |
#edit ⇒ Object
70 71 |
# File 'lib/symphonia/base_controller.rb', line 70 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
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_name ⇒ Object
109 110 111 |
# File 'lib/symphonia/base_controller.rb', line 109 def model_name model.name.demodulize.underscore.to_sym end |
#new ⇒ Object
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 |
#show ⇒ Object
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 |
#update ⇒ Object
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 |