mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-04 12:14:37 +08:00
removes duplicated keywords [fixes SCI-2294]
This commit is contained in:
parent
801d0a4a22
commit
ed39294733
2 changed files with 33 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
|||
class ProtocolKeyword < ApplicationRecord
|
||||
auto_strip_attributes :name, nullify: false
|
||||
validates :name,
|
||||
uniqueness: { scope: :team },
|
||||
length: { minimum: Constants::NAME_MIN_LENGTH,
|
||||
maximum: Constants::NAME_MAX_LENGTH }
|
||||
validates :team, presence: true
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
namespace :protocol_keyword_team do
|
||||
desc 'Fixes false team_id on protocol keyword entry [bug SCI-2257]'
|
||||
desc 'Fixes false team_id on protocol keyword entry [bug SCI-2257] and ' \
|
||||
'removes duplicates in the scope of team [bug SCI-2294]'
|
||||
task exec: :environment do
|
||||
puts '[SciNote] Start processing...'
|
||||
Protocol.find_each do |protocol|
|
||||
|
@ -20,6 +21,36 @@ namespace :protocol_keyword_team do
|
|||
# append newly created keywords to protocol
|
||||
protocol.protocol_keywords << new_keywords
|
||||
end
|
||||
|
||||
# remove duplicates
|
||||
Team.find_each do |team|
|
||||
ActiveRecord::Base.transaction do
|
||||
keywords = team.protocol_keywords
|
||||
names = keywords.pluck(:name)
|
||||
duplicates_ids = []
|
||||
keywords.each do |keyword|
|
||||
duplicates_ids << keyword.id if names.count(keyword.name) > 1
|
||||
end
|
||||
|
||||
duplicates_ids.each do |id|
|
||||
protocol_keyword = ProtocolKeyword.find_by_id(id)
|
||||
next unless protocol_keyword
|
||||
duplicates = keywords.where(name: protocol_keyword.name)
|
||||
protocol_ids = duplicates.map { |k| k.protocols.pluck(:id) }
|
||||
duplicates.destroy_all
|
||||
new_protocol_keyword = ProtocolKeyword.create!(
|
||||
name: protocol_keyword.name,
|
||||
team_id: protocol_keyword.team_id
|
||||
)
|
||||
protocol_ids.flatten.uniq.each do |protocol_id|
|
||||
ProtocolProtocolKeyword.create!(
|
||||
protocol_id: protocol_id,
|
||||
protocol_keyword_id: new_protocol_keyword.id
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
puts '[SciNote] Done!'
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue