diff --git a/app/models/metadata_belongs_to.rb b/app/models/metadata_belongs_to.rb index e1b84438..8726f1b1 100644 --- a/app/models/metadata_belongs_to.rb +++ b/app/models/metadata_belongs_to.rb @@ -41,7 +41,7 @@ class MetadataBelongsTo < MetadataRelatedPosts # anterior if belonged_to.present? if belonged_to[inverse].respond_to? :has_one - belonged_to[inverse].value = nil + belonged_to[inverse].value = '' else belonged_to[inverse].value = belonged_to[inverse].value.reject do |rej| rej == post.uuid.value diff --git a/app/models/metadata_has_one.rb b/app/models/metadata_has_one.rb index 38911e1d..d1705e7d 100644 --- a/app/models/metadata_has_one.rb +++ b/app/models/metadata_has_one.rb @@ -1,29 +1,24 @@ # frozen_string_literal: true -class MetadataHasOne < MetadataHasMany - def had_one - return default_value if value_was.blank? - - posts.find(uuid: value) - end - - def has_one - return default_value if value.blank? - - posts.find(uuid: value) - end - - def had_many; end - def has_many; end +class MetadataHasOne < MetadataBelongsTo + alias has_one belongs_to + alias had_one belonged_to def save - super + # XXX: DRY + if !changed? + self[:value] = document_value + + return true + end + + self[:value] = sanitize value return true unless changed? return true unless inverse? - had_one&.value = nil - has_one&.value = post.uuid.value + had_one[inverse]&.value = '' if had_one + has_one[inverse]&.value = post.uuid.value if has_one true end