diff options
Diffstat (limited to 'app/models/ml/model_version.rb')
-rw-r--r-- | app/models/ml/model_version.rb | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/app/models/ml/model_version.rb b/app/models/ml/model_version.rb index e7fcde2cb5c..58da57f27d6 100644 --- a/app/models/ml/model_version.rb +++ b/app/models/ml/model_version.rb @@ -2,6 +2,8 @@ module Ml class ModelVersion < ApplicationRecord + include Presentable + validates :project, :model, presence: true validates :version, @@ -10,11 +12,15 @@ module Ml presence: true, length: { maximum: 255 } + validates :description, + length: { maximum: 500 } + validate :valid_model?, :valid_package? belongs_to :model, class_name: 'Ml::Model' belongs_to :project belongs_to :package, class_name: 'Packages::MlModel::Package', optional: true + has_one :candidate, class_name: 'Ml::Candidate' delegate :name, to: :model @@ -22,8 +28,17 @@ module Ml scope :latest_by_model, -> { order_by_model_id_id_desc.select('DISTINCT ON (model_id) *') } class << self - def find_or_create!(model, version, package) - create_with(package: package).find_or_create_by!(project: model.project, model: model, version: version) + def find_or_create!(model, version, package, description) + create_with(package: package, description: description) + .find_or_create_by!(project: model.project, model: model, version: version) + end + + def by_project_id_and_id(project_id, id) + find_by(project_id: project_id, id: id) + end + + def by_project_id_name_and_version(project_id, name, version) + joins(:model).find_by(model: { name: name, project_id: project_id }, project_id: project_id, version: version) end end |