Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `Плюсы:` и задаёт контекст выполнения.
- Ключевые элементы блока: `INSERT`, `id`, `Ruby`, `Factories`, `factory_bot`, они определяют основную логику примера.
- По шагам код выполняется так: `Плюсы:` -> `- скорость загрузки (один `INSERT` на таблицу);` -> `- стабильные `id`, удобно для тестов ассоциаций;` -> `- не требуют Ruby-логики.`.
- Для производительности важны индексы по условиям выборки, проверка плана выполнения и контроль N+1 при связях.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.
FactoryBot.define do
factory :user do
name { "User #{sequence(:user)}" }
email { "#{name.downcase}@example.com" }
association :profile
end
end
create(:user, name: 'Тимур') # → создаёт пользователя и связанный профиль
Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `Плюсы:` и задаёт контекст выполнения.
- Ключевые элементы блока: `INSERT`, `id`, `Ruby`, `Factories`, `factory_bot`, они определяют основную логику примера.
- По шагам код выполняется так: `Плюсы:` -> `- скорость загрузки (один `INSERT` на таблицу);` -> `- стабильные `id`, удобно для тестов ассоциаций;` -> `- не требуют Ruby-логики.`.
- Для производительности важны индексы по условиям выборки, проверка плана выполнения и контроль N+1 при связях.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.
FactoryBot.define do
factory :user do
name { "User #{sequence(:user)}" }
email { "#{name.downcase}@example.com" }
association :profile
end
end
create(:user, name: 'Тимур') # → создаёт пользователя и связанный профиль