make map methods use ActiveRecord relations so they don't error on pundit

This commit is contained in:
Devin Howard 2016-10-25 16:44:01 +08:00
parent 47bca5907e
commit 4875a8b0c4

View file

@ -41,11 +41,11 @@ class Map < ApplicationRecord
end end
def contributors def contributors
mappings.map(&:user).uniq User.where(id: mappings.map(&:user_id).uniq)
end end
def editors def editors
collaborators + [user] User.where(id: user_id).or(User.where(id: collaborators))
end end
def topic_count def topic_count
@ -87,7 +87,7 @@ class Map < ApplicationRecord
end end
def starred_by_user?(user) def starred_by_user?(user)
user.stars.where(map: self).exists? user&.stars&.where(map: self)&.exists?
end end
def as_json(_options = {}) def as_json(_options = {})
@ -114,9 +114,8 @@ class Map < ApplicationRecord
def add_new_collaborators(user_ids) def add_new_collaborators(user_ids)
users = User.where(id: user_ids) users = User.where(id: user_ids)
current_collaborators = collaborators + [user]
added = users.map do |new_user| added = users.map do |new_user|
next nil if current_collaborators.include?(new_user) next nil if editors.include?(new_user)
UserMap.create(user_id: new_user.id, map_id: id) UserMap.create(user_id: new_user.id, map_id: id)
new_user.id new_user.id
end end
@ -124,8 +123,7 @@ class Map < ApplicationRecord
end end
def remove_old_collaborators(user_ids) def remove_old_collaborators(user_ids)
current_collaborators = collaborators + [user] removed = editors.map(&:id).map do |old_user_id|
removed = current_collaborators.map(&:id).map do |old_user_id|
next nil if user_ids.include?(old_user_id) next nil if user_ids.include?(old_user_id)
user_maps.where(user_id: old_user_id).find_each(&:destroy) user_maps.where(user_id: old_user_id).find_each(&:destroy)
access_requests.where(user_id: old_user_id).find_each(&:destroy) access_requests.where(user_id: old_user_id).find_each(&:destroy)