← Каталог
Работа с базами данных из Ruby — Сериализация в JSON/Hash
Фрагмент из «Работа с базами данных из Ruby»: Сериализация в JSON/Hash.
Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `Генерируемые методы:` и задаёт контекст выполнения.
- Ключевые элементы блока: `status`, `active`, `status`, `active!`, `active`, они определяют основную логику примера.
- По шагам код выполняется так: `Генерируемые методы:` -> `- `status` → `'active'`;` -> `- `status=` → присваивает символ или строку;` -> `- `active!` → сохраняет статус `active`;`.
- Практически важно добавить обработку ошибок и явные проверки входа, чтобы исключить скрытые падения в рантайме.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.
class User < ActiveRecord::Base
serialize :settings, JSON
# или в Rails 5+:
store :settings, accessors: [:theme, :language], coder: JSON
end
user = User.new
user.theme = 'dark'
user.language = 'ru'
user.save
# → INSERT ... (settings) VALUES ('{"theme":"dark","language":"ru"}')
Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `Генерируемые методы:` и задаёт контекст выполнения.
- Ключевые элементы блока: `status`, `active`, `status`, `active!`, `active`, они определяют основную логику примера.
- По шагам код выполняется так: `Генерируемые методы:` -> `- `status` → `'active'`;` -> `- `status=` → присваивает символ или строку;` -> `- `active!` → сохраняет статус `active`;`.
- Практически важно добавить обработку ошибок и явные проверки входа, чтобы исключить скрытые падения в рантайме.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.
class User < ActiveRecord::Base
serialize :settings, JSON
# или в Rails 5+:
store :settings, accessors: [:theme, :language], coder: JSON
end
user = User.new
user.theme = 'dark'
user.language = 'ru'
user.save
# → INSERT ... (settings) VALUES ('{"theme":"dark","language":"ru"}')