From 3cc3253ce37c93e6c1cd92fd73060bea1e27c96f Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Sun, 4 Apr 2010 18:12:52 +0200 Subject: [PATCH] preserve database integrity for recurring todos when deleting project or context. Fixes #880. Fixes #895 --- app/controllers/projects_controller.rb | 1 + app/models/context.rb | 1 + app/models/project.rb | 1 + app/models/recurring_todo.rb | 5 +++++ 4 files changed, 8 insertions(+) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 1baca4b6..158a0ff8 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -163,6 +163,7 @@ class ProjectsController < ApplicationController end def destroy + @project.recurring_todos.each {|rt| rt.remove_from_project!} @project.destroy @active_projects_count = current_user.projects.active.count @hidden_projects_count = current_user.projects.hidden.count diff --git a/app/models/context.rb b/app/models/context.rb index 41d27a53..a7d79f72 100644 --- a/app/models/context.rb +++ b/app/models/context.rb @@ -1,6 +1,7 @@ class Context < ActiveRecord::Base has_many :todos, :dependent => :delete_all, :include => :project, :order => "todos.completed_at DESC" + has_many :recurring_todos, :dependent => :delete_all belongs_to :user named_scope :active, :conditions => { :hide => false } diff --git a/app/models/project.rb b/app/models/project.rb index 4013e985..ed77cbef 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,6 +1,7 @@ class Project < ActiveRecord::Base has_many :todos, :dependent => :delete_all, :include => :context has_many :notes, :dependent => :delete_all, :order => "created_at DESC" + has_many :recurring_todos belongs_to :default_context, :class_name => "Context", :foreign_key => "default_context_id" belongs_to :user diff --git a/app/models/recurring_todo.rb b/app/models/recurring_todo.rb index cb5f4173..57a2a8ee 100644 --- a/app/models/recurring_todo.rb +++ b/app/models/recurring_todo.rb @@ -631,6 +631,11 @@ class RecurringTodo < ActiveRecord::Base end starred? end + + def remove_from_project! + self.project = nil + self.save + end def inc_occurences self.occurences_count += 1