Учебники

Ruby on Rails — Активные записи

Rails Active Record — это слой Object / Relational Mapping (ORM), поставляемый с Rails. Это близко следует за стандартной моделью ORM, которая является следующей —

  • таблицы отображаются на классы,
  • строки отображаются на объекты и
  • столбцы сопоставляются с атрибутами объекта.

Rails Active Records предоставляют интерфейс и связывание между таблицами в реляционной базе данных и программным кодом Ruby, который управляет записями базы данных. Имена методов Ruby автоматически генерируются из имен полей таблиц базы данных.

Каждый объект Active Record имеет методы CRUD ( C reate, R ead, U pdate и D elete) для доступа к базе данных. Эта стратегия допускает простой дизайн и прямое сопоставление между таблицами базы данных и объектами приложения.

Перевод модели предметной области в SQL

Перевод модели предметной области в SQL, как правило, прост, если вы помните, что вам нужно писать дружественный к Rails SQL. В практическом плане вы должны следовать определенным правилам —

  • Каждый объект (например, книга) получает таблицу в базе данных, названной в его честь, но во множественном числе (книги).

  • Каждая такая таблица соответствия сущностей имеет поле с именем id , которое содержит уникальное целое число для каждой записи, вставленной в таблицу.

  • Для данной сущности x и сущности y, если сущность y принадлежит сущности x, то таблица y имеет поле с именем x_id.

  • Большая часть полей в любой таблице хранит значения для простых свойств этого объекта (все, что является числом или строкой).

Каждый объект (например, книга) получает таблицу в базе данных, названной в его честь, но во множественном числе (книги).

Каждая такая таблица соответствия сущностей имеет поле с именем id , которое содержит уникальное целое число для каждой записи, вставленной в таблицу.

Для данной сущности x и сущности y, если сущность y принадлежит сущности x, то таблица y имеет поле с именем x_id.

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

Создание файлов активной записи (модели)

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

library\> rails script/generate model Book
library\> rails script/generate model Subject

Выше рельсы генерируют модель книги, команды генерируют автоматический код, как показано ниже —

Генерация книг

Вы говорите генератору о создании моделей под названием «Книга» и «Тема» для хранения экземпляров книг и предметов. Обратите внимание, что вы пишете с большой буквы книгу и тему и используете единственную форму. Это парадигма Rails, которой вы должны следовать каждый раз, когда создаете модель.

Когда вы используете инструмент генерации, Rails создает фактический файл модели, в котором хранятся все методы, уникальные для модели и бизнес-правил, которые вы определяете, файл модульного теста для выполнения управляемой тестированием разработки, файл примера данных (называемый фиксаторами) для использования. с модульными тестами и миграцией Rails, которая упрощает создание таблиц и столбцов базы данных.

Помимо создания многих других файлов и каталогов, это создаст файлы с именами book.rb и subject.rb, содержащие определение скелета в каталоге app / models .

Содержимое доступно в book.rb —

class Book < ActiveRecord::Base
end

Содержимое доступно в subject.rb —

class Subject < ActiveRecord::Base
end

Создание связей между моделями

Когда в вашем приложении rails имеется более одной модели, вам необходимо создать связь между этими моделями. Вы можете сделать это через ассоциации. Active Record поддерживает три типа ассоциаций —

  • один-к-одному — отношение один-к-одному существует, когда один элемент имеет ровно один из другого элемента. Например, у человека ровно один день рождения, или у собаки ровно один хозяин.

  • «один ко многим». Отношение «один ко многим» существует, когда один объект может быть членом многих других объектов. Например, один предмет может иметь много книг.

  • многие ко многим. Отношение многие ко многим существует, когда первый объект связан с одним или несколькими вторыми объектами, а второй объект связан с одним или несколькими первыми объектами.

один-к-одному — отношение один-к-одному существует, когда один элемент имеет ровно один из другого элемента. Например, у человека ровно один день рождения, или у собаки ровно один хозяин.

«один ко многим». Отношение «один ко многим» существует, когда один объект может быть членом многих других объектов. Например, один предмет может иметь много книг.

многие ко многим. Отношение многие ко многим существует, когда первый объект связан с одним или несколькими вторыми объектами, а второй объект связан с одним или несколькими первыми объектами.

Вы указываете эти ассоциации, добавляя объявления к своим моделям: has_one, has_many, assign_to и has_and_belongs_to_many.

Теперь вам нужно сообщить Rails, какие отношения вы хотите установить в библиотечной системе данных. Для этого измените book.rb и subject.rb так:

class Book < ActiveRecord::Base
   belongs_to :subject
end

Мы использовали единственную тему в приведенном выше примере, потому что одна книга может принадлежать одному предмету.

class Subject < ActiveRecord::Base
   has_many :books
end

Мы использовали несколько книг здесь, потому что один предмет может иметь несколько книг.

Реализация проверок на моделях

Реализация проверок выполняется в модели Rails. Данные, которые вы вводите в базу данных, определены в реальной модели Rails, поэтому имеет смысл только определить, какие действительные данные влекут за собой в том же месте.

Проверки —

  • Значение поля заголовка не должно быть NULL.
  • Значение поля цены должно быть числовым.

Откройте book.rb в подкаталоге app \ model и поместите следующие проверки:

class Book < ActiveRecord::Base
   belongs_to :subject
   validates_presence_of :title
   validates_numericality_of :price, :message=>"Error Message"
end
  • validates_presence_of — защищает поля «NOT NULL» от пропущенного пользовательского ввода.

  • validates_numericity_of — запрещает пользователю вводить нечисловые данные.

validates_presence_of — защищает поля «NOT NULL» от пропущенного пользовательского ввода.

validates_numericity_of — запрещает пользователю вводить нечисловые данные.

Помимо проверок, упомянутых выше, существуют и другие распространенные проверки. Краткое руководство по Rails .

Что дальше?

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