Я испытываю затруднения при понимании ORM в Ruby on Rails. Из того, что я понимаю, что существует 1:1 отношения между таблицами/столбцы и объектами/атрибутами. Таким образом, каждая запись является объектом. Также, что такое точно Модель? Я знаю, что это отображается на таблицу.
Что я действительно, после более глубокое понимание вышеупомянутого.Заранее спасибо за помощь
Я - Веб-разработчик, идущий от PHP до Ruby on Rails.
"Насколько я понимаю, существует соотношение 1:1 между таблицами/столбцами и объектами/атрибутами. Так что каждая запись - это объект"
-
"Это не совсем верно, если только вы не используете термин "объект" очень свободно. Таблицы смоделированы классами , а записи таблицы смоделированы экземплярами этих классов .
Допустим, у вас есть таблица clients
, со столбцами id
(autonum) и name
(varchar). Допустим, в ней только одна запись, id=1 и имя="Ford". Затем:
клиенты
сопоставят с классом модели Client
.ford = Client.find(1)
ford
. Вы можете сделать ford.id
и получите 1. Вы можете сделать ford.name
и получите строку "Ford". Вы также можете изменить имя клиента, сделав ford.name = "Chevrolet"
, а затем зафиксировать изменения в базе данных, сделав ford.save."Также что такое модель? Я знаю, что она отображает таблицу"
Модели - это просто классы с лотами очень полезными методами для работы с базой данных. Вот несколько примеров:
brands
(с соответствующей моделью Brand
), связанная через посторонний ключ с вашим форд-клиентом, вы могли бы сделать ford.brands
и вы бы получили массив объектов, представляющих все записи в таблице брендов, которые имеют client_id = 1.Это лишь некоторые примеры. Активная запись предоставляет гораздо больше функций, таких как переводы, поиск в запросах или поддержка наследования одной таблицы.
И последнее, но не менее важное, вы можете добавить свои собственные методы к этим классам.
Модели - отличный способ не писать "spaguetti-код", так как вы вроде как вынуждены разделять свой код по функциональности.
ORM в Rails - это реализация шаблона Active Record из книги Мартина Фаулера Шаблоны архитектуры корпоративных приложений . Соответственно, инфраструктура ORM Rails называется ActiveRecord.
Основная идея состоит в том, что таблица базы данных обернута в класс, а экземпляр объекта соответствует одной строке в этой таблице. Таким образом, создание нового экземпляра добавляет строку в таблицу, обновление объекта обновляет строку и т. Д. Класс-оболочка реализует свойства для каждого столбца в таблице. В ActiveRecord Rails эти свойства становятся доступными автоматически с помощью метапрограммирования Ruby на основе схемы базы данных. При необходимости вы можете переопределить эти свойства, если вам нужно ввести дополнительную логику. Вы также можете добавить так называемые виртуальные атрибуты , которые не имеют соответствующего столбца в базовой таблице базы данных.
Rails - это среда Модель-Представление-Контроллер (MVC), поэтому модель Rails - это M в MVC. Помимо описанного выше класса-оболочки ActiveRecord, он содержит бизнес-логику, в том числе логику проверки, реализованную модулем Validation ActiveRecord.
Здесь есть две части: ORM и шаблон MVC Rails. ORM - это сокращение от «объектно-реляционное сопоставление», и он делает почти то же, что и говорит: сопоставляет таблицы в вашей базе данных с объектами, с которыми вы можете работать.
MVC - это сокращение от «модель-представление-контроллер», шаблон это описывает, как Rails превращает поведение вашего домена и представления объектов в полезные страницы. Шаблон MVC разбивается на три части:
Модели содержат определение того, что представляет собой объект в вашем домене и как он связан с другими моделями. Он также описывает, как поля и отношения, представленные на карте объектов, в резервных хранилищах (например, в базе данных). Обратите внимание, что, по сути, в модели нет ничего, что предписывало бы вам использовать конкретный ORM (или даже ORM вообще).
Контроллеры определяют, как модели должны взаимодействовать друг с другом для получения полезных результатов в ответ на запрос пользователя.
Представления берут результаты, созданные контроллерами, и отображают их желаемым образом. (К тому времени, как вы доберетесь до своего представления, вы должны в основном знать, что отображается, и должно происходить очень мало поведения.)
Объектно-реляционное сопоставление (ORM, O / RM, и отображение O / R) в компьютерном программном обеспечении это метод программирования для преобразование данных между несовместимыми системы типов в реляционных базах данных и объектно-ориентированное программирование языков. По сути, это создает "база данных виртуальных объектов", которая может быть используется изнутри программирования язык.
С точки зрения PHP это будет следующим образом (через пример)
Вы можете определить отношения между таблицами, например, говоря: Posts has_many Comments, Комментарий принадлежит посту и так далее.
По сути, вы не работаете со строками базы данных, вместо этого вы превращаете эти строки и их отношения в объекты с отношениями композиции или наследования.
Проще говоря.
Выше находится ORM Rails ActiveRecord.
1: 1 не совсем корректно, поскольку существует несоответствие импеданса объектного отношения .
Models: Объекты домена, такие как User
, Account
или Status
. Модели не обязательно поддерживаются внутренним интерфейсом БД, так как, например, Состояние
может быть просто статически набранным перечислением.
ActiveRecord:
Предоставляет динамические методы для запроса таблиц БД. Таблица БД определяется как класс, наследующий класс ActiveRecord (псевдо-PHP пример):
class User extends ActiveRecord {}
//find a record by name, and returns an instance of `User`
$record = User::find_by_name("Imran");
echo $record->name; //prints "Imran"
//there are a lot more dynamic methods for quering
Новые записи создаются путем создания новых экземпляров унаследованных ActiveRecord-классов:
class Account extends ActiveRecord {}
$account = new Account();
$account->name = "Bank Account";
$account->save();