Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Наследование заключается в передачи всей структуры одного класса в другой, или просто
копирование одного класс в другойНо наследование также позволяет создавать
дополнительные свойства, не доступные классу, от которого произошло наследование.
Наследование — очень полезная вещь, потому что предоставляет возможность повторного
использования кода и спасает от повторений в коде.
1. belonge_to
2. has_one
3. has_many
4. .Has_many:through
5. Has_one:through
6. Has_and_belong_to_many
Различие в том, где помещен внешний ключ (он должен быть в таблице
для класса, объявляющего связь belongs_to), но вы также должны
думать о реальном значении данных. Отношение has_one говорит, то
что-то указывает на вас. Например, больше смысла в том, что
поставщик владеет аккаунтом, чем в том, что аккаунт владеет
поставщиком
Утиная Типизация
ORM
Active Record сглаживает все различия между этими БД, так что вам не
нужно думать об этом. Вы сосредотачиваетесь на написании кода для
вашего приложения, а Active Record будет думать о мельчайших
деталях подключения вас к вашей базе данных. Даже если вы
поменяете БД на другую вам фактически не нужно изменять какой-
либо основной код приложения, а только некоторые конфигурационные
файлы.
Git merge
Git Rebase
Связь many-to-many
Связь one-to-one
Связь one-to-many
JOINS в SQL
Проблема N+1
Решение:
Scope
http://rusrails.ru/active-record-query-interface (15 заметка)
CRUD
https://guides.firstdraft.com/crud-with-ruby#crud-with-ruby
https://www.rubycode.ru/ruby-on-rails/71-ruby-on-rails-dlya-
nachinayuschih.html
SOLID
SOLID это свод пяти основных принципов OOP.
Принципы
1. Single Responsibility Principle (Принцип единственной
ответственности)
2. Open Closed Principle (Принцип открытости/закрытости)
3. Liskov Substitution Principle (Принцип подстановки Барбары
Лисков)
4. Interface Segregation Principle (Принцип разделения интерфейса)
5. Dependency Inversion Principle (Принцип инверсии зависимостей)
Как он устроен?
Как он устроен?
Как он устроен?
https://www.restapitutorial.com/lessons/httpmethods.html
REST в Rails
https://medium.com/@andr.ivas12/rest-простым-языком-90a0bca0bc78
Ruby
Итераторы
Как работают?
Для Num
Для Диапазона
Struct vs OpenStruct
Блоки
Send
Eigenclass в Ruby
Singleton class
https://refactoring.guru/ru/design-patterns/singleton/ruby/example
https://medium.com/@lucyhackwrench/%D1%87%D1%82%D0%BE-
%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-tdd-%D0%B8-bdd-
%D0%BD%D0%B0-%D0%BF%D0%B0%D0%BB%D1%8C
%D1%86%D0%B0%D1%85-%D0%B8-%D1%87%D1%82%D0%BE-
%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD-
%D0%B7%D0%BD%D0%B0%D1%82%D1%8C-%D0%B
Include
Если написан несколько классов, которые совместно используют
похожие методы, можно извлечь эти методы в модуль. Как только
методы записаны в модуль, вы можете “включить” этот модуль в любой
из классов, которые могут потребоваться для вызова этих методов. Нет
необходимости держать эти методы в подвешенном состоянии.
Self-Ruby
http://rusrails.ru/active-record-callbacks#after_initialize-i-after_find
Миграции в Rails
http://rusrails.ru/rails-database-migrations - using-reversible
Garbage Collector
https://stackify.com/how-does-ruby-garbage-collection-work-a-simple-
tutorial/
Дизайны проектирования
Query Object
https://dev.to/renatamarques97/design-patterns-with-ruby-on-rails-part-2-
query-object-1h65#:~:text=The%20query%20object%20is%20a,easy%20to
%20reuse%20and%20test.
Rake Task
Rake - это Ruby Make, автономная утилита Ruby, которая заменяет утилиту «make» Unix и
использует файлы «Rakefile» и .rake для создания списка задач.
Проще говоря:
Rake будет выполнять различные задачи (в основном набор кода ruby), указанные в любом
файле с расширением. rake из командной строки.
https://www.rubyguides.com/2019/02/ruby-rake/
Транзакции - это защитные блоки, где операторы SQL являются постоянными только в том
случае, если все они могут быть успешными как одно атомарное действие.
Классический пример - перевод между двумя счетами, где вы можете внести депозит только в
том случае, если снятие средств прошло успешно, и наоборот.
Kernal class
Kernal class ключен в класс Object, поэтому его методы доступны в каждом объекте Ruby.
Методы экземпляра ядра описаны в классе Object. В этом разделе описаны методы модуля.
Эти методы вызываются без приемника, поэтому их можно вызывать в функциональной
форме.
https://blog.appsignal.com/2019/05/07/method-missing.html Цепочка
Вложенная форма создает или управляет моделью, которая отличается от модели, для которой
предназначена родительская форма.
Полиморфные Связи
Полиморфные связи — это немного более сложный вид связей. Тк при помощи полиморфных
связяей модель может принадлежать более чем одной модели, на одиночной связи. Например,
имеется модель изображения, которая принадлежит или модели работника, или модели
продукта. В миграции обозначить
Иногда можно делиться полями и поведением между различными моделями. Для этого мы
должны добавить поле type, тк STI не работает без поля "type" в таблице. Для этого можно
использовать опцию --parent=PARENT, которая сгенерирует модель, унаследованную от
указанного родителя и без эквивалентной миграции (так как таблица уже существует).
Это означает, что все поведение, такое как связи, публичные методы и тд будет доступно и
для родителя, и для модели
Проверка покрытия кода тестами проверяется при помощи simplecov(не менее 80%) дожно
быть покрытие.
Timecop vcr
Double в может использоваться либо как stub (allow), либо как stub(expect) , и он проверит,
существует ли метод с этим именем.
Если метод работает с внешними объектами и отправляет им что то, можно использовать
mocks для взаимодействия с этими объектами.
Если метод будет ожидать данные от API(например), можено использовать stubs для
предоставления этих данных в целях тестирования.
Главное отличие Include и Extend заключается в том, что "include" предназначен для
добавления методов только к экземпляру класса, а " Extend " предназначен для добавления
методов к классу.
https://www.geeksforgeeks.org/include-v-s-extend-in-ruby/#:~:text=In
%20simple%20words%2C%20the%20difference,but%20not%20to%20its
%20instance.
Фильтры "before" могут прерывать цикл запроса. Обычный фильтр "before" - это, например,
тот, который требует, чтобы пользователь был авторизован для запуска экшна.
Фильтры "after" похожи на "before", но очевидно, фильтры "after" не могут остановить экшн
от запуска. Обратите внимание, что фильтры "after" выполняются только после успешного
выполнения экшна, но не при возникновении исключения в цикле запроса.
Фильтры "around" ответственны за запуск связанных с ними экшнов с помощью yield,
подобно тому, как работают промежуточные программы Rack.
Redis база данных, работающая с хэшем. с открытым исходным кодом для структур данных
«ключ-значение». Самые распространенные примеры использования Redis включают
кэширование, управление сессиями и тд.
Глобальные переменные они доступны в любой части кода и они могу изменится затруднить
отлов багов
Index для БД
Мы можем гарантировать, что два или более индекса будут уникальными в нашей базе
данных, добавив уникальный параметр в конце. Для этого надо добавить unique: true.
https://medium.com/@brettschules/add-index-rails-b68bf2d99d17
Where(Условие)
Пример:
Изменение массивов при помощи метода(open class struct)