Class: ApplicationRecord
Direct Known Subclasses
AbuseReport, Achievements::Achievement, Achievements::UserAchievement, ActivityPub::ReleasesSubscription, Admin::AbuseReportAssignee, AlertManagement::Alert, AlertManagement::AlertAssignee, AlertManagement::HttpIntegration, AlertManagement::MetricImage, Alerting::ProjectAlertingSetting, Analytics::CycleAnalytics::Aggregation, Analytics::CycleAnalytics::IssueStageEvent, Analytics::CycleAnalytics::MergeRequestStageEvent, Analytics::CycleAnalytics::Stage, Analytics::CycleAnalytics::StageAggregation, Analytics::CycleAnalytics::StageEventHash, Analytics::CycleAnalytics::ValueStream, Analytics::UsageTrends::Measurement, AntiAbuse::Event, AntiAbuse::Reports::Label, AntiAbuse::Reports::LabelLink, AntiAbuse::Reports::Note, AntiAbuse::TrustScore, Appearance, ApplicationSetting, ApplicationSetting::Term, Approval, Atlassian::Identity, AuditEvent, AuditEvents::GroupAuditEvent, AuditEvents::InstanceAuditEvent, AuditEvents::ProjectAuditEvent, AuditEvents::UserAuditEvent, AuthenticationEvent, AwardEmoji, Aws::Role, Badge, BatchedGitRefUpdates::Deletion, Board, BoardGroupRecentVisit, BoardProjectRecentVisit, BulkImport, BulkImports::BatchTracker, BulkImports::Configuration, BulkImports::Entity, BulkImports::Export, BulkImports::ExportBatch, BulkImports::ExportUpload, BulkImports::Failure, BulkImports::Tracker, ChatName, ChatTeam, Ci::ApplicationRecord, Ci::Catalog::Resource, Ci::Catalog::Resources::Component, Ci::Catalog::Resources::Components::LastUsage, Ci::Catalog::Resources::Components::Usage, Ci::Catalog::Resources::SyncEvent, Ci::Catalog::Resources::Version, Ci::Catalog::VerifiedNamespace, Ci::NamespaceMirror, CloudConnector::ServiceAccessToken, Clusters::Agent, Clusters::AgentToken, Clusters::Agents::ActivityEvent, Clusters::Agents::Authorizations::CiAccess::GroupAuthorization, Clusters::Agents::Authorizations::CiAccess::ProjectAuthorization, Clusters::Agents::Authorizations::UserAccess::GroupAuthorization, Clusters::Agents::Authorizations::UserAccess::ProjectAuthorization, Clusters::Cluster, Clusters::ClusterEnabledGrant, Clusters::Group, Clusters::Integrations::Prometheus, Clusters::KubernetesNamespace, Clusters::Platforms::Kubernetes, Clusters::Project, Clusters::Providers::Aws, Clusters::Providers::Gcp, CommitSignatures::GpgSignature, CommitSignatures::SshSignature, CommitSignatures::X509CommitSignature, ContainerExpirationPolicy, ContainerRegistry::DataRepairDetail, ContainerRegistry::Protection::Rule, ContainerRegistry::Protection::TagRule, ContainerRepository, CustomEmoji, CustomerRelations::Contact, CustomerRelations::IssueContact, CustomerRelations::Organization, DependencyProxy::Blob, DependencyProxy::GroupSetting, DependencyProxy::ImageTtlGroupPolicy, DependencyProxy::Manifest, DeployKeysProject, DeployToken, Deployment, DeploymentCluster, DeploymentMergeRequest, DescriptionVersion, DesignManagement::Action, DesignManagement::Design, DesignManagement::Repository, DesignManagement::Version, DevOpsReport::Metric, DiffNotePosition, DraftNote, EarlyAccessProgram::Base, Email, Environment, Epic, ErrorTracking::ClientKey, ErrorTracking::Error, ErrorTracking::ErrorEvent, ErrorTracking::ProjectErrorTrackingSetting, Event, ForkNetwork, ForkNetworkMember, Gitlab::BackgroundMigration::BackfillBranchProtectionNamespaceSetting::Namespace, Gitlab::BackgroundMigration::BackfillBranchProtectionNamespaceSetting::NamespaceSetting, Gitlab::BackgroundMigration::BackfillDefaultBranchProtectionNamespaceSetting::Namespace, Gitlab::BackgroundMigration::BackfillDefaultBranchProtectionNamespaceSetting::NamespaceSetting, Gitlab::BackgroundMigration::BackfillDefaultOrganizationOwnersAgain::Organizations::OrganizationUser, Gitlab::BackgroundMigration::BackfillDefaultOrganizationUsers::Organizations::OrganizationUser, Gitlab::BackgroundMigration::BackfillDraftStatusOnMergeRequestsWithCorrectedRegex::MergeRequest, Gitlab::BackgroundMigration::BackfillEpicBasicFieldsToWorkItemRecord::Epics, Gitlab::BackgroundMigration::BackfillEpicBasicFieldsToWorkItemRecord::Issues, Gitlab::BackgroundMigration::BackfillEpicBasicFieldsToWorkItemRecord::Users, Gitlab::BackgroundMigration::BackfillEpicBasicFieldsToWorkItemRecord::WorkItemColors, Gitlab::BackgroundMigration::BackfillEpicBasicFieldsToWorkItemRecord::WorkItemTypes, Gitlab::BackgroundMigration::BackfillEpicDatesToWorkItemDatesSources::Epics, Gitlab::BackgroundMigration::BackfillEpicDatesToWorkItemDatesSources::WorkItemDatesSources, Gitlab::BackgroundMigration::BackfillEpicIssuesIntoWorkItemParentLinks::ParentLink, Gitlab::BackgroundMigration::BackfillFindingIdInVulnerabilities::VulnerabilitiesFindings, Gitlab::BackgroundMigration::BackfillIntegrationsEnableSslVerification::Integration, Gitlab::BackgroundMigration::BackfillIssueLinkIdOnRelatedEpicLinks::RelatedEpicLink, Gitlab::BackgroundMigration::BackfillIssueSearchDataNamespaceId::IssueSearchData, Gitlab::BackgroundMigration::BackfillMilestoneReleasesProjectId::MilestoneRelease, Gitlab::BackgroundMigration::BackfillMissingCiCdSettings::ProjectCiCdSetting, Gitlab::BackgroundMigration::BackfillNoteDiscussionId::Note, Gitlab::BackgroundMigration::BackfillNugetNormalizedVersion::Package, Gitlab::BackgroundMigration::BackfillNugetNormalizedVersion::PackagesNugetMetadatum, Gitlab::BackgroundMigration::BackfillOnboardingStatusStepUrl::UserDetail, Gitlab::BackgroundMigration::BackfillOrDropCiPipelineOnProjectId::MergeRequest, Gitlab::BackgroundMigration::BackfillProjectFeaturePackageRegistryAccessLevel::ProjectFeature, Gitlab::BackgroundMigration::BackfillProjectIdToDependencyListExports::DependencyListExport, Gitlab::BackgroundMigration::BackfillUserDetails::UserDetail, Gitlab::BackgroundMigration::BackfillVsCodeSettingsVersion::VsCodeSetting, Gitlab::BackgroundMigration::BackfillWorkItemHierarchyForEpics::Epics, Gitlab::BackgroundMigration::BackfillWorkItemHierarchyForEpics::WorkItemParentLinks, Gitlab::BackgroundMigration::ConvertCreditCardValidationDataToHashes::CreditCardValidation, Gitlab::BackgroundMigration::CreateJiraCloudAppIntegrationForJiraConnectSubscription::Integration, Gitlab::BackgroundMigration::CreateMissingTerraformModuleMetadata::Packages::TerraformModule::Metadatum, Gitlab::BackgroundMigration::DeduplicateLfsObjectsProjects::LfsObjectsProject, Gitlab::BackgroundMigration::DeleteOrphansApprovalMergeRequestRules2::ApprovalMergeRequestRuleSource, Gitlab::BackgroundMigration::DeleteOrphansApprovalProjectRules2::ApprovalMergeRequestRuleSource, Gitlab::BackgroundMigration::DisableLegacyOpenSourceLicenseForInactivePublicProjects::ProjectSetting, Gitlab::BackgroundMigration::DisableLegacyOpenSourceLicenseForNoIssuesNoRepoProjects::ProjectSetting, Gitlab::BackgroundMigration::DisableLegacyOpenSourceLicenseForOneMemberNoRepoProjects::ProjectSetting, Gitlab::BackgroundMigration::FixSyncedEpicWorkItemParentLinks::EpicIssues, Gitlab::BackgroundMigration::FixSyncedEpicWorkItemParentLinks::WorkItemParentLinks, Gitlab::BackgroundMigration::FixSyncedEpicWorkItemParentLinks::WorkItemType, Gitlab::BackgroundMigration::MigrateLinksForVulnerabilityFindings::Finding, Gitlab::BackgroundMigration::MigrateLinksForVulnerabilityFindings::Link, Gitlab::BackgroundMigration::MigrateOsSbomOccurrencesToComponentsWithoutPrefix::Component, Gitlab::BackgroundMigration::MigrateOsSbomOccurrencesToComponentsWithoutPrefix::ComponentVersion, Gitlab::BackgroundMigration::MigrateOsSbomOccurrencesToComponentsWithoutPrefix::Occurrence, Gitlab::BackgroundMigration::PopulateVulnerabilityDismissalFields::Feedback, Gitlab::BackgroundMigration::PopulateVulnerabilityDismissalFields::Finding, Gitlab::BackgroundMigration::PopulateVulnerabilityDismissalFields::Vulnerability, Gitlab::BackgroundMigration::PurgeStaleSecurityScans::SecurityScan, Gitlab::BackgroundMigration::RecalculateDoraDeploymentFrequencyScore::DailyMetric, Gitlab::BackgroundMigration::RecalculateDoraDeploymentFrequencyScore::Environment, Gitlab::BackgroundMigration::RecoverDeletedMlModelVersionPackages::Model, Gitlab::BackgroundMigration::RecoverDeletedMlModelVersionPackages::Package, Gitlab::BackgroundMigration::ResolveVulnerabilitiesForRemovedAnalyzers::Migratable::Vulnerabilities::Feedback, Gitlab::BackgroundMigration::ResolveVulnerabilitiesForRemovedAnalyzers::Migratable::Vulnerabilities::Read, Gitlab::BackgroundMigration::ResolveVulnerabilitiesForRemovedAnalyzers::Migratable::Vulnerabilities::Statistic, Gitlab::BackgroundMigration::ResyncHasVulnerabilities::ProjectSetting, Gitlab::BackgroundMigration::Route, Gitlab::BackgroundMigration::SetLegacyOpenSourceLicenseAvailableForNonPublicProjects::ProjectSetting, Gitlab::BackgroundMigration::UpdateDelayedProjectRemovalToNullForUserNamespaces::NamespaceSetting, Gitlab::BackgroundMigration::UpdateOwaspTop10DefaultOfVulnerabilityReads::VulnerabilitiesRead, Gitlab::Database::PgUser, Gitlab::Database::SecApplicationRecord, Gitlab::DatabaseImporters::Security::TrainingProviders::Importer::Security::TrainingProvider, GpgKey, GpgKeySubkey, GrafanaIntegration, Group::CrmSettings, GroupCustomAttribute, GroupDeployKeysGroup, GroupDeployToken, GroupGroupLink, GroupImportState, Groups::FeatureSetting, Identity, Import::NamespaceImportUser, Import::Placeholders::Membership, Import::SourceUser, Import::SourceUserPlaceholderReference, ImportExportUpload, ImportFailure, IncidentManagement::IssuableEscalationStatus, IncidentManagement::ProjectIncidentManagementSetting, IncidentManagement::TimelineEvent, IncidentManagement::TimelineEventTag, IncidentManagement::TimelineEventTagLink, Integration, Integrations::Instance::Integration, Integrations::IssueTrackerData, Integrations::JiraTrackerData, Integrations::SlackWorkspace::ApiScope, Integrations::SlackWorkspace::IntegrationApiScope, Integrations::ZentaoTrackerData, InternalId, IssuableSeverity, Issue, Issue::Email, Issue::Metrics, IssueAssignee, IssueEmailParticipant, IssueLink, Issues::CsvImport, Issues::SearchData, JiraConnectInstallation, JiraConnectSubscription, JiraImportState, Key, Label, LabelLink, LabelPriority, LfsFileLock, LfsObject, LfsObjectsProject, List, ListUserPreference, MainClusterwide::ApplicationRecord, Member, Members::DeletionSchedule, Members::MemberApproval, MergeRequest, MergeRequest::CleanupSchedule, MergeRequest::DiffCommitUser, MergeRequest::Metrics, MergeRequestAssignee, MergeRequestContextCommit, MergeRequestContextCommitDiffFile, MergeRequestDiff, MergeRequestDiffCommit, MergeRequestDiffFile, MergeRequestReviewer, MergeRequests::MergeSchedule, MergeRequestsClosingIssues, Milestone, MilestoneRelease, Ml::Candidate, Ml::CandidateMetadata, Ml::CandidateMetric, Ml::CandidateParam, Ml::Experiment, Ml::ExperimentMetadata, Ml::Model, Ml::ModelMetadata, Ml::ModelVersion, Ml::ModelVersionMetadata, Namespace, Namespace::AdminNote, Namespace::AggregationSchedule, Namespace::Detail, Namespace::PackageSetting, Namespace::RootStorageStatistics, NamespaceCiCdSetting, NamespaceSetting, NamespaceStatistics, Namespaces::Descendants, Namespaces::LdapSetting, Namespaces::SyncEvent, Note, NoteDiffFile, Notes::NoteMetadata, NotificationSetting, Operations::FeatureFlag, Operations::FeatureFlags::Scope, Operations::FeatureFlags::Strategy, Operations::FeatureFlags::StrategyUserList, Operations::FeatureFlags::UserList, Operations::FeatureFlagsClient, Organizations::Organization, Organizations::OrganizationDetail, Organizations::OrganizationSetting, Organizations::OrganizationUser, PackageMetadata::ApplicationRecord, Packages::BuildInfo, Packages::Cleanup::Policy, Packages::Composer::Metadatum, Packages::Conan::FileMetadatum, Packages::Conan::Metadatum, Packages::Conan::PackageReference, Packages::Conan::PackageRevision, Packages::Conan::RecipeRevision, Packages::Debian::FileMetadatum, Packages::Debian::GroupArchitecture, Packages::Debian::GroupComponent, Packages::Debian::GroupComponentFile, Packages::Debian::GroupDistribution, Packages::Debian::GroupDistributionKey, Packages::Debian::ProjectArchitecture, Packages::Debian::ProjectComponent, Packages::Debian::ProjectComponentFile, Packages::Debian::ProjectDistribution, Packages::Debian::ProjectDistributionKey, Packages::Debian::Publication, Packages::Dependency, Packages::DependencyLink, Packages::Helm::FileMetadatum, Packages::Maven::Metadatum, Packages::Npm::MetadataCache, Packages::Npm::Metadatum, Packages::Nuget::DependencyLinkMetadatum, Packages::Nuget::Metadatum, Packages::Nuget::Symbol, Packages::Package, Packages::PackageFile, Packages::PackageFileBuildInfo, Packages::Protection::Rule, Packages::Pypi::Metadatum, Packages::Rpm::Metadatum, Packages::Rpm::RepositoryFile, Packages::Rubygems::Metadatum, Packages::Tag, Packages::TerraformModule::Metadatum, PagesDeployment, PagesDomain, PagesDomainAcmeOrder, PersonalAccessToken, Plan, PlanLimits, PoolRepository, ProgrammingLanguage, Project, ProjectAuthorization, ProjectAutoDevops, ProjectCiCdSetting, ProjectCustomAttribute, ProjectDailyStatistic, ProjectDeployToken, ProjectExportJob, ProjectFeature, ProjectFeatureUsage, ProjectGroupLink, ProjectImportData, ProjectImportState, ProjectPagesMetadatum, ProjectRepository, ProjectSetting, ProjectStatistics, Projects::BuildArtifactsSizeRefresh, Projects::CiFeatureUsage, Projects::DataTransfer, Projects::ImportExport::RelationExport, Projects::ImportExport::RelationExportUpload, Projects::ImportExport::RelationImportTracker, Projects::ProjectTopic, Projects::RepositoryStorageMove, Projects::SyncEvent, Projects::Topic, Projects::WikiRepository, ProtectedBranch, ProtectedBranch::MergeAccessLevel, ProtectedBranch::PushAccessLevel, ProtectedTag, ProtectedTag::CreateAccessLevel, PushEventPayload, RawUsageData, RedirectRoute, Release, Releases::Evidence, Releases::Link, RemoteMirror, RepositoryLanguage, ResourceEvent, ResourceEvents::AbuseReportEvent, ResourceEvents::IssueAssignmentEvent, ResourceEvents::MergeRequestAssignmentEvent, Review, Route, SentNotification, SentryIssue, ServiceDesk::CustomEmailCredential, ServiceDesk::CustomEmailVerification, ServiceDeskSetting, Shard, SlackIntegration, Snippet, SnippetRepository, SnippetStatistics, Snippets::RepositoryStorageMove, SpamLog, Subscription, Suggestion, System::BroadcastMessage, SystemNoteMetadata, TermAgreement, Terraform::State, Terraform::StateVersion, TimeTracking::TimelogCategory, Timelog, Todo, TrendingProject, Upload, User, UserAgentDetail, UserCustomAttribute, UserDetail, UserHighestRole, UserMention, UserPreference, UserStatus, UserSyncedAttributesMetadata, Users::BannedUser, Users::BroadcastMessageDismissal, Users::Callout, Users::CreditCardValidation, Users::GhostUserMigration, Users::GroupCallout, Users::GroupVisit, Users::NamespaceCommitEmail, Users::PhoneNumberValidation, Users::ProjectCallout, Users::ProjectVisit, Users::SavedReply, Users::UserFollowUser, UsersStarProject, UsersStatistics, VirtualRegistries::Packages::Maven::CachedResponse, VirtualRegistries::Packages::Maven::Registry, VirtualRegistries::Packages::Maven::RegistryUpstream, VirtualRegistries::Packages::Maven::Upstream, VsCode::Settings::VsCodeSetting, WebHook, WebHookLog, WebauthnRegistration, WikiPage::Meta, WikiPage::Slug, WorkItems::DatesSource, WorkItems::HierarchyRestriction, WorkItems::ParentLink, WorkItems::RelatedLinkRestriction, WorkItems::RelatedWorkItemLink, WorkItems::Type, WorkItems::WidgetDefinition, X509Certificate, X509Issuer, ZoomMeeting
Constant Summary
collapse
- MAX_PLUCK =
1_000
HasCheckConstraints::NOT_NULL_CHECK_PATTERN
ResetOnColumnErrors::MAX_RESET_PERIOD
Class Method Summary
collapse
Instance Method Summary
collapse
#reset_on_union_error, #reset_on_unknown_attribute_error
#serializable_hash
Class Method Details
.===(object) ⇒ Object
This method has been removed in Rails 7.1 However, application relies on it in case-when usages with objects wrapped in presenters
132
133
134
|
# File 'app/models/application_record.rb', line 132
def self.===(object)
object.is_a?(self)
end
|
.cached_column_list ⇒ Object
118
119
120
|
# File 'app/models/application_record.rb', line 118
def self.cached_column_list
column_names.map { |column_name| arel_table[column_name] }
end
|
.declarative_enum(enum_mod) ⇒ Object
114
115
116
|
# File 'app/models/application_record.rb', line 114
def self.declarative_enum(enum_mod)
enum(enum_mod.key => enum_mod.values)
end
|
.default_select_columns ⇒ Object
122
123
124
125
126
127
128
|
# File 'app/models/application_record.rb', line 122
def self.default_select_columns
if ignored_columns.any?
cached_column_list
else
arel_table[Arel.star]
end
end
|
.id_in(ids) ⇒ Object
27
28
29
|
# File 'app/models/application_record.rb', line 27
def self.id_in(ids)
where(id: ids)
end
|
.id_not_in(ids) ⇒ Object
39
40
41
|
# File 'app/models/application_record.rb', line 39
def self.id_not_in(ids)
where.not(id: ids)
end
|
.iid_in(iids) ⇒ Object
35
36
37
|
# File 'app/models/application_record.rb', line 35
def self.iid_in(iids)
where(iid: iids)
end
|
.nullable_column?(column_name) ⇒ Boolean
136
137
138
139
|
# File 'app/models/application_record.rb', line 136
def self.nullable_column?(column_name)
columns.find { |column| column.name == column_name }.null &&
!not_null_check?(column_name)
end
|
.pluck_primary_key ⇒ Object
43
44
45
|
# File 'app/models/application_record.rb', line 43
def self.pluck_primary_key
where(nil).pluck(primary_key)
end
|
.primary_key_in(values) ⇒ Object
31
32
33
|
# File 'app/models/application_record.rb', line 31
def self.primary_key_in(values)
where(primary_key => values)
end
|
.safe_ensure_unique(retries: 0) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'app/models/application_record.rb', line 47
def self.safe_ensure_unique(retries: 0)
transaction(requires_new: true) do yield
end
rescue ActiveRecord::RecordNotUnique
if retries > 0
retries -= 1
retry
end
false
end
|
.safe_find_or_create_by(*args, &block) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'app/models/application_record.rb', line 82
def self.safe_find_or_create_by(*args, &block)
record = find_by(*args)
return record if record.present?
transaction(requires_new: true) { all.create(*args, &block) } rescue ActiveRecord::RecordNotUnique
find_by(*args)
end
|
.safe_find_or_create_by!(*args, &block) ⇒ Object
60
61
62
63
64
65
66
|
# File 'app/models/application_record.rb', line 60
def self.safe_find_or_create_by!(*args, &block)
safe_find_or_create_by(*args, &block).tap do |record|
raise ActiveRecord::RecordNotFound unless record.present?
record.validate! unless record.persisted?
end
end
|
.underscore ⇒ Object
102
103
104
|
# File 'app/models/application_record.rb', line 102
def self.underscore
@underscore ||= to_s.underscore
end
|
.where_exists(query) ⇒ Object
106
107
108
|
# File 'app/models/application_record.rb', line 106
def self.where_exists(query)
where('EXISTS (?)', query.select(1))
end
|
.where_not_exists(query) ⇒ Object
110
111
112
|
# File 'app/models/application_record.rb', line 110
def self.where_not_exists(query)
where('NOT EXISTS (?)', query.select(1))
end
|
.with_fast_read_statement_timeout(timeout_ms = 4500) ⇒ Object
Start a new transaction with a shorter-than-usual statement timeout. This is currently one third of the default 15-second timeout with a 500ms buffer to allow callers gracefully handling the errors to still complete within the 5s target duration of a low urgency request.
72
73
74
75
76
77
78
79
80
|
# File 'app/models/application_record.rb', line 72
def self.with_fast_read_statement_timeout(timeout_ms = 4500)
::Gitlab::Database::LoadBalancing::SessionMap.current(load_balancer).fallback_to_replicas_for_ambiguous_queries do
transaction(requires_new: true) do connection.exec_query("SET LOCAL statement_timeout = #{timeout_ms}")
yield
end
end
end
|
.without_order ⇒ Object
23
24
25
|
# File 'app/models/application_record.rb', line 23
def self.without_order
reorder(nil)
end
|
Instance Method Details
#create_or_load_association(association_name) ⇒ Object
96
97
98
99
100
|
# File 'app/models/application_record.rb', line 96
def create_or_load_association(association_name)
association(association_name).create unless association(association_name).loaded?
rescue ActiveRecord::RecordNotUnique, PG::UniqueViolation
association(association_name).reader
end
|
#readable_by?(user) ⇒ Boolean
141
142
143
|
# File 'app/models/application_record.rb', line 141
def readable_by?(user)
Ability.allowed?(user, "read_#{to_ability_name}".to_sym, self)
end
|
#to_ability_name ⇒ Object
145
146
147
|
# File 'app/models/application_record.rb', line 145
def to_ability_name
model_name.element
end
|