InfoGrab DocsInfoGrab Docs

Fixed Items 모델

ActiveRecord::FixedItemsModel을 사용하여 데이터베이스 테이블 대신 코드에서 정적인 읽기 전용 데이터를 정의하고, Cells 아키텍처에서 일관된 ID를 유지하는 방법을 설명합니다.

데이터베이스 테이블 대신 코드에 정적인 읽기 전용 데이터를 정의할 때는 ActiveRecord::FixedItemsModel 을 사용합니다. 인스턴스는 ActiveRecord 객체처럼 동작하지만 결정적이고 버전 관리되는 ID와 함께 메모리에 저장됩니다. 이 패턴은 다음 조건에 해당하는 데이터베이스 기반 조회 테이블을 대체합니다. 데이터가 정적이고 코드 배포로만 변경됩니다. Cells 전반에서 전역적으로 일관된 ID가 필요합니다. 조회 시 데이터베이스 쿼리가 전혀 없어도 무방합니다. 사용 시기 # 다음 경우에 FixedItemsModel 을 사용합니다. 데이터가 코드에 정의되어 있고 배포로만 변경됩니다. 모든 Cells와 환경에서 ID가 동일해야 합니다. 데이터가 런타임에 변경되지 않습니다(사용자가 만든 레코드가 없음). 데이터 집합이 작거나 정적으로 정의되어야 하는 것은 아닙니다. 다른 소스에서 항목을 동적으로 계산하려면 .fixed_items 클래스 메서드를 사용합니다. 예를 들어 WidgetDefinition 은 모든 작업 항목 유형과 그 위젯 설정을 순회해 항목을 생성합니다. 영속성 계층에서 항목에 안정적인 ID가 필요하지 않다면 auto_generate_ids! 를 사용합니다. 다음 경우에는 FixedItemsModel 을 사용하지 않습니다. 사용자나 관리자가 런타임에 레코드를 생성, 수정, 삭제할 수 있습니다. 레코드에 has_many 나 has_many :through 같은 데이터베이스 수준의 연관 관계가 필요합니다. Cells 아키텍처 컨텍스트 # 자동 증가 시퀀스를 사용하는 데이터베이스 테이블은 같은 논리적 엔터티에 대해 Cell 마다 다른 ID를 생성합니다. Cell A의 plan_id = 4 는 premium 을 뜻하고 Cell B의 plan_id = 4 는 gold 를 뜻할 수 있으므로 Cell 간 참조가 깨집니다. FixedItemsModel 은 애플리케이션 코드에 ID를 직접 명시해 이 문제를 해결합니다. 모든 Cell 이 같은 정의를 로드해 같은 ID를 생성합니다. 자세한 내용은 Cells 개발 지침의 정적 데이터 섹션 을 참고합니다. 기본 사용법 # ITEMS 상수를 사용한 모델 정의 # 가장 단순한 패턴은 항목을 인라인으로 정의합니다. module Security class StaticTrainingProvider include ActiveRecord::FixedItemsModel::Model ITEMS = [ { id: 1 , name: "Kontra" , url: "https://application.security/api/webhook/gitlab/exercises/search" }, { id: 2 , name: "Secure Code Warrior" , url: "https://integration-api.securecodewarrior.com/api/v1/trial" }, { id: 3 , name: "SecureFlag" , url: "https://knowledge-base-api.securefl