Накладываем швы на ActiveRecord::SchemaDumper
March 28, 2017
В рейлс primary key
- желательно делать id
, формально конечно можно поставить что-то другое, но
гарантия заканчивается очень быстро. У нас в одном проекте сделали ключом uuid
и конечно же сломался дамп
схемы. Где сломался дамп схемы, там сломались тесты и вообще не хорошо все это.
Иногда получается вставить аккуратный монкей-патч, но тут нужно было фиксить увесистый приватый метод
ActiveRecord::SchemaDumper#table
. Обычно я делаю так:
- Добавляю файл в
config/initializers
, обычно это достаточно удачное время - Копирую подопытный метод целиком, по возможности с условиями:
if defined?(ActiveRecord::SchemaDumper) ...
- Обязательно ставлю ассерт на текущую версию рейлс
raise "review and update this patch for Rails upgrade" if Rails.version != "4.2.8"
- Каждое вмешательство оформляю ярко, примерно так:
##### [BEGIN PATCH 2]
# # original code
# next if column.name == pk
# @connection.column_spec(column, @types)
# # patched code
if column.name == pk
if pk == "uuid"
@connection.column_spec(column, @types).merge(primary: "primary: true")
else
next
end
else
@connection.column_spec(column, @types)
end
##### [END PATCH 2]
В данном случае удалось обойтись тремя швами и схема как новенькая.
Tweet