mirror of
https://github.com/redmine/redmine.git
synced 2025-11-17 18:50:53 +01:00
Fix watcher handling on unsaved objects (#39186).
Patch by Holger Just. git-svn-id: https://svn.redmine.org/redmine/trunk@22349 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -11,6 +11,7 @@ module Redmine
|
||||
module ClassMethods
|
||||
def acts_as_watchable(options = {})
|
||||
return if self.included_modules.include?(Redmine::Acts::Watchable::InstanceMethods)
|
||||
|
||||
class_eval do
|
||||
has_many :watchers, :as => :watchable, :dependent => :delete_all
|
||||
has_many :watcher_users, :through => :watchers, :source => :user, :validate => false
|
||||
@@ -44,17 +45,26 @@ module Redmine
|
||||
|
||||
# Adds user as a watcher
|
||||
def add_watcher(user)
|
||||
# Rails does not reset the has_many :through association
|
||||
watcher_users.reset
|
||||
self.watchers << Watcher.new(:user => user)
|
||||
if persisted?
|
||||
# Rails does not reset the has_many :through association
|
||||
watcher_users.reset
|
||||
self.watchers << Watcher.new(:user => user)
|
||||
else
|
||||
self.watcher_users << user
|
||||
end
|
||||
end
|
||||
|
||||
# Removes user from the watchers list
|
||||
def remove_watcher(user)
|
||||
return nil unless user && (user.is_a?(User) || user.is_a?(Group))
|
||||
# Rails does not reset the has_many :through association
|
||||
watcher_users.reset
|
||||
watchers.where(:user_id => user.id).delete_all
|
||||
|
||||
if persisted?
|
||||
# Rails does not reset the has_many :through association
|
||||
watcher_users.reset
|
||||
watchers.where(:user_id => user.id).delete_all
|
||||
else
|
||||
watcher_users.delete(user)
|
||||
end
|
||||
end
|
||||
|
||||
# Adds/removes watcher
|
||||
|
||||
Reference in New Issue
Block a user