From 4a165eb99ea46938bbc369952f6b2f1ff777eb5a Mon Sep 17 00:00:00 2001 From: Clarissa <cdp13@inf.ufpr.br> Date: Thu, 25 Jan 2018 12:16:58 -0200 Subject: [PATCH] SCRUM#275: fixing on_delete for foreign key on attachments --- .../v1/learning_objects/attachment_controller.rb | 13 +++++++++---- app/models/learning_object/attachment.rb | 7 +++---- .../learning_object/attachment_serializer.rb | 3 ++- ...pdate_learning_object_attachments_foreign_key.rb | 6 ------ ...ing_object_attachments_foreign_key_on_cascade.rb | 7 ++++--- ...attachment_id_for_learning_object_attachments.rb | 6 ++++++ ...dd_foreign_key_to_learning_object_attachments.rb | 8 ++++++++ 7 files changed, 32 insertions(+), 18 deletions(-) delete mode 100644 db/migrate/20171205120824_update_learning_object_attachments_foreign_key.rb create mode 100644 db/migrate/20180119174926_remove_attachment_id_for_learning_object_attachments.rb create mode 100644 db/migrate/20180123124526_add_foreign_key_to_learning_object_attachments.rb diff --git a/app/controllers/v1/learning_objects/attachment_controller.rb b/app/controllers/v1/learning_objects/attachment_controller.rb index 5df351e7..1ddbd2ed 100644 --- a/app/controllers/v1/learning_objects/attachment_controller.rb +++ b/app/controllers/v1/learning_objects/attachment_controller.rb @@ -27,7 +27,7 @@ class V1::LearningObjects::AttachmentController < ApplicationController # GET /learning_objects/:learning_object_id/attachment def index - @attachment = paginate LearningObject::Attachment.includes(:attachment) + @attachment = paginate @attachment render json: @attachment end @@ -68,13 +68,18 @@ class V1::LearningObjects::AttachmentController < ApplicationController end def update_params - params.permit(:attachment_id, :infohash) + params.permit(:learning_object_attachment_id, :learning_object_attachment_id_son, :infohash) end def set_objects - @learning_object = LearningObject.find(attachment_params[:learning_object_id]) + if current_user.try(:is_admin?) + @learning_object = LearningObject.unscoped.find(attachment_params[:learning_object_id]) + else + @learning_object = LearningObject.find(attachment_params[:learning_object_id]) + end + if ( attachment_params[:id].blank? ) - @attachment = @learning_object.attachment + @attachment = @learning_object.attachments else @attachment = LearningObject::Attachment.find(attachment_params[:id]) end diff --git a/app/models/learning_object/attachment.rb b/app/models/learning_object/attachment.rb index 9f57093d..4ac95362 100644 --- a/app/models/learning_object/attachment.rb +++ b/app/models/learning_object/attachment.rb @@ -45,10 +45,9 @@ class LearningObject::Attachment < ApplicationRecord include ::Thumbnailable belongs_to :learning_object scope :unknown_mime_type, ->() { where(format: 'Unknown') } - has_one :attachment, class_name: 'LearningObject::Attachment' - belongs_to :attachment, class_name: 'LearningObject::Attachment' - # has_and_belongs_to_many - # belongs_to + has_one :learning_object_attachment, as: :learning_object_attachment_id_son + belongs_to :learning_object_attachment + def retrieve_url "#{DspaceService.link}/rest#{retrieve_link}" diff --git a/app/serializers/learning_object/attachment_serializer.rb b/app/serializers/learning_object/attachment_serializer.rb index 4d192a09..867abf04 100644 --- a/app/serializers/learning_object/attachment_serializer.rb +++ b/app/serializers/learning_object/attachment_serializer.rb @@ -34,5 +34,6 @@ class LearningObject::AttachmentSerializer < ActiveModel::Serializer :id_dspace, :thumbnail, :cache_link, - :attachment_id + :learning_object_attachment_id, + :learning_object_attachment_id_son end diff --git a/db/migrate/20171205120824_update_learning_object_attachments_foreign_key.rb b/db/migrate/20171205120824_update_learning_object_attachments_foreign_key.rb deleted file mode 100644 index f9f6597e..00000000 --- a/db/migrate/20171205120824_update_learning_object_attachments_foreign_key.rb +++ /dev/null @@ -1,6 +0,0 @@ -class UpdateLearningObjectAttachmentsForeignKey < ActiveRecord::Migration[5.0] - def change - remove_foreign_key :learning_object_attachments, :learning_object_attachments - add_foreign_key :learning_object_attachments, :learning_object_attachments, column: :attachment_id, on_delete: :cascade - end -end diff --git a/db/migrate/20171205140057_remove_learning_object_attachments_foreign_key_on_cascade.rb b/db/migrate/20171205140057_remove_learning_object_attachments_foreign_key_on_cascade.rb index dc68cf30..b9cfc308 100644 --- a/db/migrate/20171205140057_remove_learning_object_attachments_foreign_key_on_cascade.rb +++ b/db/migrate/20171205140057_remove_learning_object_attachments_foreign_key_on_cascade.rb @@ -1,5 +1,6 @@ class RemoveLearningObjectAttachmentsForeignKeyOnCascade < ActiveRecord::Migration[5.0] - def change - remove_foreign_key :learning_object_attachments, :learning_object_attachments - end + def change + remove_foreign_key :learning_object_attachments, :learning_object_attachments + end end + diff --git a/db/migrate/20180119174926_remove_attachment_id_for_learning_object_attachments.rb b/db/migrate/20180119174926_remove_attachment_id_for_learning_object_attachments.rb new file mode 100644 index 00000000..51448b27 --- /dev/null +++ b/db/migrate/20180119174926_remove_attachment_id_for_learning_object_attachments.rb @@ -0,0 +1,6 @@ +class RemoveAttachmentIdForLearningObjectAttachments < ActiveRecord::Migration[5.0] + def change + remove_index :learning_object_attachments, :attachment_id + remove_column :learning_object_attachments, :attachment_id + end +end diff --git a/db/migrate/20180123124526_add_foreign_key_to_learning_object_attachments.rb b/db/migrate/20180123124526_add_foreign_key_to_learning_object_attachments.rb new file mode 100644 index 00000000..159078d6 --- /dev/null +++ b/db/migrate/20180123124526_add_foreign_key_to_learning_object_attachments.rb @@ -0,0 +1,8 @@ +class AddForeignKeyToLearningObjectAttachments < ActiveRecord::Migration[5.0] + def change + add_column :learning_object_attachments, :learning_object_attachment_id, :integer + add_column :learning_object_attachments, :learning_object_attachment_id_son, :integer + add_foreign_key :learning_object_attachments, :learning_object_attachments, on_delete: :cascade + add_foreign_key :learning_object_attachments, :learning_object_attachments, column: :learning_object_attachment_id_son, on_delete: :nullify + end +end -- GitLab