Как стать автором
Обновить

Ruby — хранение части кода в базе данных

Время на прочтение1 мин
Количество просмотров666
Сегодня нашел еще один способ как можно использовать «фишку» интерпретируемых языков — создавать и выполнять программный код в процессе работы программы.

Можно положить часть кода в базу данных.

Для чего это нужно?

Мне встретилась такая задача — писать онлайн тесты.
У каждого теста есть функция — по которой ответам пользователя ставится в соответствие — номер описания результата

и для каждого теста эта функция может быть разной. И не очень хочется при добавлении каждого нового теста изменять программный код сайта. Выход я нашел в том, чтобы хранить эту часть кода в базе данных в поле типа текст.

и теперь в месте, где нужно рассчитать результат теста пишем:
eval(@test.function)

function — это и есть ячейка в таблице БД, описывающей тесты.
при этом код просто вставляется в это место программы и выполняется, ему даже не надо передавать в качестве параметров результаты ответов пользователя, он их и так уже видит

Правда если внутри строки, передаваемой eval объявить локальную переменную, то внешняя программа ее не будет видеть (по крайней мере у меня не увидела, хотя в консоли все было ок), поэтому лучше пользоваться переменными экземпляра (instance variables) вида — @varname

Подозреваю справедливую критику со стороны любителей строгого ООП. Но приводить этот пример в согласие с ООП я не буду, если есть желание — поэкспериментируйте.
Теги:
Хабы:
Всего голосов 16: ↑5 и ↓11-6
Комментарии23

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань