`Scoped` 패턴을 사용하여 Rails 컨트롤러 간에 공통 코드 공유

2543 단어 webdevrailsruby
Rails 앱을 구축하기 위해 엄격한 REST/중첩 리소스 접근 방식을 따르는 경우 공통 컨트롤러 작업을 반복하는 데 질릴 수 있습니다.
Scoped 문제 패턴: 공유 코드(변수 설정, 권한 부여)를 넣고 컨트롤러를 슬림화하는 장소를 사용해 보세요.

용법



이 특정 패턴은 동작의 일부를 공유하는 코드베이스인 DHH 및 Basecamp에서 비롯됩니다.
before_action를 조회하기 위해 동일한 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


추가 리소스



DHH 요지: Models for Nested Resources

좋은 웹페이지 즐겨찾기