Handle perfomance issue with team import. Model specs

This commit is contained in:
Dmitriy Zaporozhets 2012-10-24 14:52:17 +03:00
parent fd0aca1225
commit b7a9e41bd2
2 changed files with 55 additions and 9 deletions

View file

@ -22,19 +22,32 @@ class UsersProject < ActiveRecord::Base
class << self
def import_team(source_project, target_project)
UsersProject.transaction do
team = source_project.users_projects.all
UsersProject.without_repository_callback do
UsersProject.transaction do
team = source_project.users_projects.all
team.each do |tm|
# Skip if user already present in team
next if target_project.users.include?(tm.user)
team.each do |tm|
# Skip if user already present in team
next if target_project.users.include?(tm.user)
new_tm = tm.dup
new_tm.id = nil
new_tm.project_id = target_project.id
new_tm.save
new_tm = tm.dup
new_tm.id = nil
new_tm.project_id = target_project.id
new_tm.save
end
end
end
target_project.update_repository
true
rescue
false
end
def without_repository_callback
UsersProject.skip_callback(:destroy, :after, :update_repository)
yield
UsersProject.set_callback(:destroy, :after, :update_repository)
end
def bulk_delete(project, user_ids)