Skip to content

Instantly share code, notes, and snippets.

@ryenski
Last active June 6, 2017 16:28
Show Gist options
  • Save ryenski/c70b8c23ad60bede606b60d07b3ad0ef to your computer and use it in GitHub Desktop.
Save ryenski/c70b8c23ad60bede606b60d07b3ad0ef to your computer and use it in GitHub Desktop.
Example base controller using STI.
class FormsController < ApplicationController
before_action :set_form, only: [:show, :edit, :update, :destroy, :embed, :customize]
# GET /forms
# GET /forms.json
def index
@forms = skope.newest_first
respond_to do |format|
format.html
format.json { render json: @forms }
end
end
# GET /forms/1
# GET /forms/1.json
def show; end
# GET /forms/new
def new
@form = skope.new
end
# GET /forms/1/edit
def edit; end
# ...
private
# Use callbacks to share common setup or constraints between actions.
def set_form
@form = FormPresenter.new(skope.find_by!(slug: params[:id]))
end
def permitted_params
[
:user_id,
:headline,
:body
# :etc...
]
end
# Never trust parameters from the scary internet, only allow the white list through.
def form_params
params.require(:form).permit(permitted_params)
end
def skope
raise "skope must be implemented in STI subclass"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment