This content originally appeared on DEV Community and was authored by matt swanson
If you follow a strict REST / nested resources approach to building your Rails app, you might get sick of repeating common controller actions.
Try the Scoped
concern pattern: a place to put shared code (setting variables, authorization) and slim down your controllers.
Usage
This particular pattern comes from DHH and Basecamp – a codebase that prides itself of using lots of tiny concerns to share bits of behavior.
While the savings of repeating the same before_action
s to look up a Channel
would be a fine benefit on it’s own, the naming convention of Scoped
is such a great, sharp name. Playlists are “scoped” to a channel so it makes total sense that the corresponding controller would be “channel scoped”.
module ChannelScoped
extend ActiveSupport::Concern
included do
before_action :set_channel, :authorize_channel
end
private
def set_channel
@channel = Channel.find(params[:channel_id])
end
def authorize_channel
authorize @channel # check that user has access, etc
end
end
class Channels::SubscriptionsController < ApplicationController
include ChannelScoped
end
class Channels::VideosController < ApplicationController
include ChannelScoped
end
class Channels::PlaylistsController < ApplicationController
include ChannelScoped
end
Additional Resources
DHH Gist: Models for Nested Resources
This content originally appeared on DEV Community and was authored by matt swanson
matt swanson | Sciencx (2021-03-10T13:00:00+00:00) Sharing common code between Rails controllers with `Scoped` pattern. Retrieved from https://www.scien.cx/2021/03/10/sharing-common-code-between-rails-controllers-with-scoped-pattern/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.