module WeBridge module AutoViewHelper module Controller module ClassMethods def set_model(model) @model = model; end def model() @model; end def pathinfo() @pathinfo ||= {}; end def set_pathinfo(pathinfo) (@pathinfo ||= {}).merge(pathinfo); end end def self.included(base) base.extend ClassMethods base.before_action :set_record, only: [:show, :edit, :update, :destroy] end # GET /???s def index @records = self.class.model.all end # GET /???s/1 def show end # GET /???s/new def new @record = self.class.model.new end # GET /???s/1/edit def edit end # POST /???s def create @record = self.class.model.new(record_params) @record.class.transaction do @record.save! record_text_params.try :each do |code,text_params| text = @record.text(code) text.attributes = text_params text.save! end flash[:notice] = 'Record was successfully created.' redirect_to action: :show, id: @record.id end rescue redirect_to action: :new end # PATCH/PUT /???s/1 def update @record.class.transaction do @record.update!(record_params) record_text_params.try :each do |code,text_params| text = @record.text(code) text.attributes = text_params text.save! end flash[:notice]='Record was successfully updated.' redirect_to action: :show, id: @record.id end rescue redirect_to action: :edit, id: @record.id end # DELETE /???s/1 def destroy @record.destroy flash[:notice]= 'Record was successfully destroyed.' redirect_to action: :index end private # Use callbacks to share common setup or constraints between actions. def set_record @record = self.class.model.find(params[:id]) end # Only allow a trusted parameter "white list" through. def record_params params.require(self.class.model.table_name).permit(*self.class.model.editable_columns) end def record_text_params columns = self.class.model.text.editable_columns permit = Hash[*self.class.model.all.pluck(:code).map{|code| [code,columns] }.flatten(1)] params[self.class.model.text.table_name].try(:permit,permit) end end end end