В этом блоге рассматриваются несколько методов проверки на стороне сервера, предоставляемых ActiveRecord, и то, как их можно отобразить в удобном для пользователя виде с помощью JavaScript.

Что такое валидация?

В контексте программирования проверка относится к процессу проверки и/или подтверждения достоверности, актуальности и точности вводимых данных. Он варьируется от проверки того, заполнено ли обязательное поле возраста или нет, до проверки того, действителен ли номер кредитной карты.

Почему проверка важна?

Проверка очень важна, потому что программисты или разработчики программного обеспечения с ее помощью гарантируют, что введенным данным можно доверять как точным и полезным. Это избавляет программистов от неточной авторизации неаутентифицированных пользователей, а также позволяет организовывать пользовательский ввод нужным образом без необходимости просматривать все данные в базе данных.

Кроме того, проверка также полезна, чтобы избежать крайних случаев и убедиться, что программы работают в тех случаях, для которых они предназначены. Благодаря проверке данных программист может избавить себя от необходимости писать условия для всех возможных пользовательских входов. Вместо этого простая проверка данных гарантирует, что пользователи смогут вводить только те данные, которые соответствуют определенным заранее определенным требованиям.

Все это говорит о том, что, хотя проверка данных кажется дополнительной и премиальной функцией, которая может замедлить процесс разработки, она очень важна, поскольку помогает получать надежные результаты.

Типы валидации

В зависимости от этапов, которые они проходят, существует два основных типа проверок — проверка на стороне клиента и проверка на стороне сервера.

  • Проверка на стороне клиента

Проверка на стороне клиента относится к процессу проверки того, что входные данные формы имеют правильный формат, когда они заполняются. Это гарантирует, что данные, введенные пользователем, соответствуют требованиям, установленным программистом, еще до того, как данные будут отправлены на сервер для обработки.

Этот тип проверки важен для удобного взаимодействия с пользователем, поскольку он уведомляет и позволяет пользователям исправить, если какие-либо из их входных данных недействительны, прежде чем они отправят их и отклонят их сервером. В результате удается избежать задержки, вызванной передачей данных от клиента к серверу и обратно. Мало того, он также требует меньше вычислительных ресурсов и, таким образом, экономит больше ресурсов, что выгодно как для разработчика, так и для клиента.

Примером проверки на стороне клиента может быть следующее:

<form>
<input type="text" name="first_name" required>
</form
<!-- The "required" keyword in the HTML above makes sure that the user does not submit the form without providing a first name. If the user forgets to do so, the form will not go ahead and send the data to the server. Rather, it does not perform any action until the user fills out the required input field -->
  • Проверка на стороне сервера

При проверке на стороне сервера ввод пользователя проверяется кодом, хранящимся на сервере. Бэкенд-код на сервере отправляет ответ клиенту относительно проверки его ввода, независимо от того, является ли он действительным или нет. Поскольку у клиентов не будет прямого доступа к исходному коду бэкенда на сервере (в отличие от внешнего HTML), проверка на стороне сервера обеспечивает большую защиту от любых злонамеренных попыток. Изменить код на сервере намного сложнее, чем изменить HTML-код страницы с помощью инструментов разработчика браузера.

Почему хорошо использовать проверку на стороне сервера и проверку на стороне клиента вместе

Несмотря на удобство для пользователя, проверки на стороне клиента уязвимы и ненадежны. Их можно обойти, внеся изменения во внешний код данной веб-страницы. Однако, если они сочетаются с проверками на стороне сервера, их уязвимость не будет такой большой проблемой, поскольку проверки на стороне сервера смогут справиться с любой злоумышленной попыткой, которая могла обойти проверку на стороне клиента.

Таким образом, совместное использование этих двух методов проверки помогает разработчику настроить надежные, удобные для пользователя, отзывчивые и исчерпывающие проверки.

АктивРекорд

Согласно определению на официальном сайте, ActiveRecord — это «уровень системы, отвечающий за представление бизнес-данных и логики». Это «облегчает создание и использование бизнес-объектов, данные которых требуют постоянного хранения в базе данных». Проще говоря, это относится к системе объектно-реляционного отображения языка программирования Ruby и его среде разработки Rails, используемой для управления ресурсами базы данных.

Наряду с несколькими другими функциями ActiveRecord предоставляет нам пару встроенных функций проверки, некоторые из которых перечислены ниже:

acceptance
validates_associated
confirmation
exclusion
format
inclusion
length
numericality
presence
absence
uniqueness
validates_with
validates_each

Использование проверок ActiveRecord

Проверка ActiveRecord обычно применяется в моделях, данные которых мы хотим проверить перед сохранением в наших базах данных. Обычно они следуют этому общему формату:

class className < ApplicationRecord
  validates :attribute_to_be_validated, validation_method: parameter
end

Ниже приведены примеры различных проверок с использованием встроенных вспомогательных функций проверки ActiveRecord:

class Person < ApplicationRecord
  validates :name, presence: true
end
#=> Return this if the name attribute is blank: ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
class Coffee < ApplicationRecord
  validates :size, inclusion: { in: %w(small medium large),
    message: "%{value} is not a valid size" }
end
#=> We can customize the error message returned by failed validations as we want
class Person < ApplicationRecord
  validates :name, length: { minimum: 2 }
  validates :bio, length: { maximum: 500 }
  validates :password, length: { in: 6..20 }
  validates :registration_number, length: { is: 6 }
end
#=> Validating the character lengths of different attributes
class Player < ApplicationRecord
  validates :points, numericality: true
  validates :games_played, numericality: { only_integer: true }
end
#=> Validating the data types of different attributes

https://guides.rubyonrails.org/active_record_validations.html

Использование JavaScript для отображения ошибок проверки

JavaScript вступает в игру валидаций, когда дело доходит до отображения сообщений об ошибках, возвращаемых валидациями на стороне сервера. Самый простой и удобный способ — проверить, возвращает ли определенная функция класса ошибку при вызове в контроллере, и если да, отобразить ошибку в виде JSON. Затем мы можем прослушать этот ответ со стороны внешнего интерфейса и отобразить ошибку либо в виде предупреждений, либо в виде различных текстовых форм.

Ниже приведена простая демонстрация того, как это можно сделать:

In the model...
class Person < ApplicationRecord
  validates :name, presence: true
end
In the controller...
def create
    person = Person.create(person_params)
    if person
        render json: person
    else 
        render person.errors.full_messages
    end
end
In the front-end...
fetch(CORRESPONDING_LINK)
.then(r => r.json())
.then()
.catch((error) => {
        alert(error);
    });

В целом, проверка данных — важный шаг в разработке веб-сайта, и ее можно выполнять как со стороны клиента, так и со стороны сервера. HTML, JavaScript и ActiveRecord можно использовать синергетически для создания надежной системы проверки различных пользовательских данных.

Консультации по работам