ITEXTRAPOLATION Telegram 732
Опишу штуку, от которой я сильно прусь и которая была нами реализована.

В рельсах почти во всех таблицах в базе есть два поля updated_at и created_at с соответствующими значениями. Поля полезные, информативные. Однажды я задался целью держать эти поля актуальными, ну там бизнес-логика такого требовала. Чтобы когда создавался новый коментарий у задачи, чтобы updated_at поле обновлялось текущей датой. Вроде бы, задача для рельсовика вообще плёвая, toch: true дописал в нужном месте и делов-то.

Потом началось протекание абстракций. Сначала захотелось рекурсивного обновления. Чтобы у таблицы-дедушки обновлялось поле, если внук создаётся. Такой вот рекурсивный touch: true, который вообще-то так и работает. Во-вторых, промежуточные (torugh) таблицы игнорируются фреймворком. Ну вот есть у тебя companies, projects, comments и ты создаёшь companies.comments.create и хотелось бы, чтобы и у соответствующего и проекта и компании updated_at обновлялся, но нет. Ещё каждое обновление updatedat в каждой таблице — это отдельный запрос. В общем, фигня, как всегда.

И мы тогда добавили две вещи.

1. Значение по-умолчанию в таблице `created
at поставили в CURRENT_TIMESTAMP
2. Триггер таблицам, которые по всем foreign
key проходятся и там UPDATE updated_at делают соовтетсвующим записям в соседних таблицах.

Получилась красота неимоверная. Теперь никаких touch: true, а все записи в базе всегда в актуальных состояниях даже когда данные прямым sql-запросом обновляются.



tgoop.com/itextrapolation/732
Create:
Last Update:

Опишу штуку, от которой я сильно прусь и которая была нами реализована.

В рельсах почти во всех таблицах в базе есть два поля updated_at и created_at с соответствующими значениями. Поля полезные, информативные. Однажды я задался целью держать эти поля актуальными, ну там бизнес-логика такого требовала. Чтобы когда создавался новый коментарий у задачи, чтобы updated_at поле обновлялось текущей датой. Вроде бы, задача для рельсовика вообще плёвая, toch: true дописал в нужном месте и делов-то.

Потом началось протекание абстракций. Сначала захотелось рекурсивного обновления. Чтобы у таблицы-дедушки обновлялось поле, если внук создаётся. Такой вот рекурсивный touch: true, который вообще-то так и работает. Во-вторых, промежуточные (torugh) таблицы игнорируются фреймворком. Ну вот есть у тебя companies, projects, comments и ты создаёшь companies.comments.create и хотелось бы, чтобы и у соответствующего и проекта и компании updated_at обновлялся, но нет. Ещё каждое обновление updatedat в каждой таблице — это отдельный запрос. В общем, фигня, как всегда.

И мы тогда добавили две вещи.

1. Значение по-умолчанию в таблице `created
at поставили в CURRENT_TIMESTAMP
2. Триггер таблицам, которые по всем foreign
key проходятся и там UPDATE updated_at делают соовтетсвующим записям в соседних таблицах.

Получилась красота неимоверная. Теперь никаких touch: true, а все записи в базе всегда в актуальных состояниях даже когда данные прямым sql-запросом обновляются.

BY Экстраполяция IT


Share with your friend now:
tgoop.com/itextrapolation/732

View MORE
Open in Telegram


Telegram News

Date: |

To delete a channel with over 1,000 subscribers, you need to contact user support Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel. The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Read now
from us


Telegram Экстраполяция IT
FROM American