Вы не должны делать это с eval
, потому что тогда кто-то, использующий ваш сайт, может отправить вам любую строку кода Ruby, что будет плохой дырой в безопасности вашего сайта.Вы можете проверить строку, используя Regexp или белый список, но это будет грязно.
Я думаю, что вы должны оценивать 1.hour
и 2.hours
и так далее при рендеринге вашей формы.Примерно так:
<%= select_tag(:days_or_hours, options_for_select({ "1 hour" => 1.hour, "2 hours" => 2.hours })) %>
Это генерирует HTML следующим образом:
<select name="days_or_hours">
<option value="3600">1 hour</option>
<option value="7200">2 hours</option>
</select>
Теперь количество секунд будет пройдено при отправке формы, и вам не нужно беспокоитьсяо том, выбрал ли пользователь часы или дни.Ваш код просто становится:
time = Time.now + params[:days_or_hours].to_i