Skip to content

Instantly share code, notes, and snippets.

@psylone
Last active March 12, 2021 05:49
Show Gist options
  • Save psylone/d594509b24aea9d7e95162d810b0d0a9 to your computer and use it in GitHub Desktop.
Save psylone/d594509b24aea9d7e95162d810b0d0a9 to your computer and use it in GitHub Desktop.
Задания к занятию 11

Задания к занятию 11

  • Структура каталогов Rails приложения
  • Rails генераторы
  • Миграции
  • Создание модели в Rails приложении. ActiveRecord, соглашения в именовании класса модели и таблицы в базе данных

1. Методы ActiveRecord

Библиотека ActiveRecord является зависимой по отношению к фреймворку Rails, однако может быть использована и самостоятельно. ActiveRecord позволяет вашим классам-моделям внутри Rails приложения обращаться к базе данных и выполнять CRUD операции над данными. Для создания модели достаточно поместить Ruby класс в каталог app/models, унаследовать его от класса ActiveRecord::Base и создать соответствующую таблицу в базе данных. Проще всего создать модель с помощью встроенного в Rails генератора:

rails g model User name:string hashed_password:string salt:string

После выполнения данной команды генератор model создаст и Ruby класс модели, и соответствующую миграцию в каталоге db/migrate. Вы можете смело редактировать миграцию добавляя нужные колонки или изменяя их тип данных.

Для того, чтобы применить миграцию (изменить схему базы данных, то есть создать соответствующую модели таблицу в базе данных) необходимо выполнить команду rake db:migrate. Откат миграции осуществляется командой rake db:rollback. Будьте внимательны, откат миграции, которая создавала новую таблицу, уничтожит таблицу целиком вместе со всеми данными в этой таблице! Иными словами, если в таблице users у вас существуют какие-то данные и вы исполните команду rake db:rollback для отката миграции, таблица users вместе с данными будет уничтожена.

После применения миграции вы можете запустить консоль Rails приложения командой rails c и работать с моделью User. Поскольку класс User наследует от класса ActiveRecord::Base, вы получаете в своё распоряжение весь интерфейс ActiveRecord.

Важно помнить, что Rails следует принципу Convention over configuration (преобладание соглашений над конфигурацией проекта). Это означает, что вместо дополнительных файлов с конфигурациями проекта достаточно следовать определённым соглашениям, и всё будет работать само собой. В нашем случае соглашение формулируется так: Имя таблицы в базе данных должно быть именем модели во множественном числе. Иными словами, для модели User таблица должна называться users, для модели Task - tasks. Если модель имеет составное имя, множественное число в имени таблицы применяется к последнему слову: MotherShip - mother_ships. Разумеется, существуют методы ActiveRecord, которые позволяют задать для модели имя таблицы. Это полезно, если вы пишете Rails приложение, используя уже существующую базу данных.

Теперь познакомимся с API ActiveRecord и попробуем найти методы которые позволяют:

  • Выбрать запись из базы данных по её уникальному идентификатору (первичному ключу)

  • Выбрать n записей из базы данных

  • Выбрать первую запись, удовлетворяющую определённым условиям (условия передаются в качестве аргумента метода в виде хэша)

  • Выбрать все записи из таблицы, однако по n штук за один SQL запрос

  • Выбрать все записи, удовлетворяющие определённым условиям (условия передаются в качестве аргумента метода в виде хэша)

  • Выбрать записи в определённом порядке

  • Получить массив со значениями для определённой колонки для строк из таблицы в базе данных

  • Сохранить модель в базе данных

  • Обновить данные модели в базе данных

  • Удалить модель из базы данных

  • Проверить, существует ли в базе данных модель с определёнными условиями

  • Удалить все строки из таблицы в базе данных для определённой модели

2. Зачем всё это?

Коротко опишите своё понимание того, зачем нужен ActiveRecord. Почему используются Ruby методы для работы с моделями, вместо SQL запросов?

3. Автономия ActiveRecord

Создайте отдельный от Rails приложения файл user.rb и превратите его в модель для работы с той же таблицей users, с которой работает наше Rails приложение Context.

Контакты для связи

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment