Ruby on Rails 문제를 사용하는 방법

Rails 문제는 ActiveSupport::Concern 모듈을 확장하는 모듈입니다.

oncerns를 사용하여 여러 클래스에 대한 공통 코드를 저장하거나 리팩토링하여 의미상 유사한 코드를 별도의 모듈로 분리할 수 있습니다.

우려 사항은 두 가지 블록을 제공합니다.

module SampleConcern
  extend ActiveSupport::Concern

  included do
    ...
  end

  class_methods do
    ...
  end
end


포함:



포함된 블록 내부의 코드는 포함 클래스의 컨텍스트에서 평가됩니다.

class_methods:



여기에서 컨테이너가 포함된 클래스의 메서드가 될 메서드를 구현할 수 있습니다.

예를 살펴보겠습니다.

우려:




module AuthenticationConcern
  extend ActiveSupport::Concern

  included do
    before_action :authenticate
  end

  private
    def authenticate
      if authenticated_user = User.find_by(id: cookies.encrypted[:user_id])
        current_user = authenticated_user
      else
        redirect_to new_session_url
      end
    end
end


제어 장치:




class ApiBaseController < ActionController::Base
  include AuthenticationConcern
  ...
end


Сoncerns를 사용하여 사용자 인증을 담당하는 코드를 별도의 모듈로 옮겼습니다.

테스트



관심사가 포함된 모든 클래스를 테스트에 포함하는 대신 개별적으로 테스트할 수 있다는 점에서 우려 사항도 편리합니다.

require 'rails_helper'
class FakeController < ApplicationController
  include AuthenticationConcern

  def new; end
end
RSpec.describe FakeController, type: :controller do    
  context '#new' do
    context 'valid user'  do
      get :new, headers: {token: 'valid_token'}     
      it { expect(response).to have_http_status(:success) }
    end

    context 'invalid user' do 
      get :new, headers: {token: 'invalid_token'}
      it { expect(response).to redirect_to(new_session_url) }
    end
  end
end

좋은 웹페이지 즐겨찾기