mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-18 23:21:30 +08:00
34 lines
1.4 KiB
Ruby
34 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class RepositoryLedgerRecord < ApplicationRecord
|
|
auto_strip_attributes :comment
|
|
|
|
belongs_to :repository_stock_value
|
|
belongs_to :reference, polymorphic: true
|
|
belongs_to :user
|
|
belongs_to :repository,
|
|
(lambda do |repository_ledger_record|
|
|
repository_ledger_record.reference_type == 'RepositoryBase' ? self : none
|
|
end),
|
|
optional: true, foreign_key: :reference_id, inverse_of: :repository_ledger_records
|
|
belongs_to :my_module_repository_row,
|
|
(lambda do |repository_ledger_record|
|
|
repository_ledger_record.reference_type == 'MyModuleRepositoryRow' ? self : none
|
|
end),
|
|
optional: true, foreign_key: :reference_id, inverse_of: :repository_ledger_records
|
|
has_one :repository_row, through: :repository_stock_value
|
|
|
|
validate :my_module_references_present?, if: -> { reference.is_a?(MyModuleRepositoryRow) }
|
|
|
|
private
|
|
|
|
def my_module_references_present?
|
|
return if my_module_references.present? &&
|
|
my_module_references['my_module_id'].is_a?(Integer) &&
|
|
my_module_references['experiment_id'].is_a?(Integer) &&
|
|
my_module_references['project_id'].is_a?(Integer) &&
|
|
my_module_references['team_id'].is_a?(Integer)
|
|
|
|
errors.add(:base, I18n.t('repository_ledger_records.errors.my_module_references_missing'))
|
|
end
|
|
end
|