Как выполнить код, хранящийся в БД? - PullRequest
1 голос
/ 04 марта 2010

По сути, у меня есть приложение Rails типа RPG. Я храню навыки в базе данных навыков со следующими полями: имя, min_level, skill_type, формула

Моя формула хранится в виде строки в настоящее время. Идея состоит в том, чтобы он произнес что-то вроде «1000 * min_level» и каким-то образом запустил его, чтобы вычислить урон навыка.

Есть ли хороший способ сделать это?

Ответы [ 3 ]

1 голос
/ 04 марта 2010

Хотя, вероятно, было бы лучше сохранить логику приложения в самом приложении, это было бы простым делом использования eval ().

eval("1000 * %i" % min_level)
1 голос
/ 04 марта 2010

Может быть, вы можете попробовать сделать что-то среднее: не разрешать администратору редактировать эти выражения напрямую, но создать какой-то простой (?) Парсер, который будет стоять посередине и который будет

  1. разобрать и проверить введенное администратором выражение, прежде чем сохранить его в базе данных
  2. фактически оценивает выражения из базы данных, учитывая хэш значений навыков и других соответствующих параметров в любое время, когда вам это нужно
1 голос
/ 04 марта 2010

Вы можете использовать eval . Если min_level является переменной в области видимости, то эта строка может быть выполнена как Ruby без каких-либо промежуточных шагов.

Конечно, огромные проблемы с безопасностью позволяют такому коду выполняться. Зависит от того, откуда эти строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...