InfoGrab DocsInfoGrab Docs

Fixed Items 모델

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

ActiveRecord::FixedItemsModel 을 사용하면 데이터베이스 테이블 대신 코드에서 정적인 읽기 전용 데이터를 정의할 수 있습니다. 인스턴스는 ActiveRecord 객체처럼 동작하지만 결정론적이고 버전으로 관리되는 ID와 함께 메모리에 저장됩니다. 이 패턴은 다음과 같은 경우에 데이터베이스 기반 룩업 테이블을 대체합니다: 데이터가 정적이며 코드 배포를 통해서만 변경됩니다. Cells 전반에 걸쳐 전역적으로 일관된 ID가 필요합니다. 룩업 시 데이터베이스 쿼리가 전혀 없어야 합니다. 사용 시기 # 다음과 같은 경우에 FixedItemsModel 을 사용합니다: 데이터가 코드에 정의되어 있고 배포를 통해서만 변경됩니다. ID가 모든 Cells와 환경에서 동일해야 합니다. 데이터가 런타임에 변경되지 않습니다(사용자가 생성한 레코드 없음). 데이터셋이 작거나 정적으로 정의될 필요는 없습니다. .fixed_items 클래스 메서드를 사용하여 다른 소스로부터 동적으로 항목을 계산할 수 있습니다. 예를 들어, WidgetDefinition 은 모든 work item 타입과 해당 위젯 설정을 순회하여 항목을 생성합니다. 항목에 영속성 레이어를 위한 안정적인 ID가 필요하지 않을 경우 auto_generate_ids! 를 사용합니다. 다음과 같은 경우에는 FixedItemsModel 을 사용하지 않습니다: 사용자나 관리자가 런타임에 레코드를 생성, 수정, 삭제할 수 있습니다. 레코드에 has_many 또는 has_many :through 와 같은 데이터베이스 수준의 연관 관계가 필요합니다. Cells 아키텍처 컨텍스트 # 자동 증가 시퀀스가 있는 데이터베이스 테이블은 같은 논리적 엔티티에 대해 서로 다른 Cells에서 서로 다른 ID를 생성합니다. Cell A의 plan_id = 4 가 premium 을 의미하는 반면 Cell B의 plan_id = 4 가 gold 를 의미할 수 있기 때문에 크로스 셀 참조가 깨질 수 있습니다. 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: "S