Вы можете просто использовать:
validates_uniqueness_of :user, scope: :type_of_message
Если вы просто хотите иметь проверку для определенного type_of_message, например, я бы предложил вам написать собственную проверку для него.
validate :one_public_comment_per_user, on: :create
private
def one_public_comment_per_user
if user.present? && user.messages.public.present?
errors.add(:base, "only one public comment is allowed per user.")
end
end