Ruby on Rails 문제를 사용하는 방법
5057 단어 rubyrailsbestpracticeswebdev
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
Reference
이 문제에 관하여(Ruby on Rails 문제를 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jetthoughts/how-to-use-ruby-on-rails-concerns-47mj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)