bans: don't allow users to be double banned.
This commit is contained in:
@@ -6,11 +6,15 @@ class Ban < ApplicationRecord
|
||||
after_destroy :create_unban_mod_action
|
||||
belongs_to :user
|
||||
belongs_to :banner, :class_name => "User"
|
||||
|
||||
validates_presence_of :reason, :duration
|
||||
validate :user, :validate_user_is_bannable, on: :create
|
||||
|
||||
scope :unexpired, -> { where("bans.expires_at > ?", Time.now) }
|
||||
scope :expired, -> { where("bans.expires_at <= ?", Time.now) }
|
||||
|
||||
attr_reader :duration
|
||||
|
||||
def self.is_banned?(user)
|
||||
exists?(["user_id = ? AND expires_at > ?", user.id, Time.now])
|
||||
end
|
||||
@@ -48,6 +52,10 @@ class Ban < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def validate_user_is_bannable
|
||||
self.errors[:user] << "is already banned" if user.is_banned?
|
||||
end
|
||||
|
||||
def update_user_on_create
|
||||
user.update!(is_banned: true)
|
||||
end
|
||||
@@ -69,8 +77,6 @@ class Ban < ApplicationRecord
|
||||
@duration = dur
|
||||
end
|
||||
|
||||
attr_reader :duration
|
||||
|
||||
def humanized_duration
|
||||
ApplicationController.helpers.distance_of_time_in_words(created_at, expires_at)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user