"Из того, что я понимаю, есть связь 1: 1 между таблицами / столбцами и объектами / атрибутами. Таким образом, каждая запись является объектом."
Это не совсем правильно, если вы не используете термин «объект» очень свободно. Таблицы моделируются классами , в то время как таблица records моделируется экземплярами этих классов .
Допустим, у вас есть таблица clients
со столбцами id
(autonum) и name
(varchar). Допустим, у него всего одна запись: id = 1 и имя = "Ford". Тогда:
- Таблица БД
clients
будет сопоставлена с классом модели Client
.
- Запись будет сопоставлена с экземпляром модели , что означает, что вам нужно создать объект и присвоить его переменной для работы с записью. Наиболее распространенным способом было бы сделать
ford = Client.find(1)
- Два столбца таблицы будут сопоставлены с методами в переменной
ford
. Вы можете сделать ford.id
, и вы получите 1. Вы можете сделать ford.name
, и вы получите строку "Ford". Вы также можете изменить имя клиента с помощью ford.name = "Chevrolet"
, а затем зафиксировать изменения в базе данных с помощью ford.save.
«И что же такое Модель? Я знаю, что она отображается в таблице»
Модели - это просто классы с лотами очень полезных методов для управления вашей базой данных. Вот несколько примеров:
- Проверки : Помимо типичных проверок на основе БД («это поле не может быть пустым»), вы можете реализовать много сложных проверок в ruby («это поле должно быть действительным адресом электронной почты» - наиболее типичный). Проверки выполняются непосредственно перед тем, как вы вызываете «save» для экземпляра модели.
- Отношения : Внешние ключи также могут быть сопоставлены с моделями. Например, если у вас есть таблица
brands
(с соответствующей ей моделью Brand
), связанная через внешний ключ с вашим клиентом ford, вы можете сделать ford.brands
, и вы получите массив объектов, представляющих все записи в таблица брендов с идентификатором client_id = 1.
- Запросы : Модели позволяют создавать запросы в ruby и сами переводить их в SQL. Большинству людей нравится эта функция.
Это только некоторые примеры. Активная запись обеспечивает гораздо больше функций, таких как переводы, определение объема запросов или поддержка наследования одной таблицы.
И последнее, но не менее важное: вы можете добавлять свои собственные методы в эти классы.
Модели - отличный способ не писать "код спагетти", так как вы вынуждены разделять свой код по функциональности.
- Модели обрабатывают взаимодействие с базой данных и бизнес-логику
- Представления обрабатывают рендеринг HTML и взаимодействие с пользователем
- Контроллеры соединяют модели с представлениями