Привет всем, кто интересуется моим вопросом.
Я рад сообщить, что создал решение сам.
Но у меня есть несколько замечаний по этому поводу. ))
Во-первых, решение:
class ApplicationController < ActionController::Base
...
...
after_filter :restore_int_value, :only => [:create, :update]
...
...
private
...
...
def restore_int_value
response.body = response.body.gsub(/(numeric.*<input id=")([^_]*)(_)([^"]*)(.*value=")(\d+)(")/){$1 + $2 + $3 + $4 + $5 + params[$2][$4] + $7}
end
...
...
end
Во-вторых, замечания:
1) решение работает с такими драгоценными камнями, как «Formtastic» и «Simple_form». Эти драгоценные камни создают формы, завернутые в подробный HTML и дают нам возможность использовать регулярные выражения.
Если вы не используете такие гемы, вы можете просто обернуть все свои целочисленные атрибуты, например, в тег 'p' с классом 'numeric', как показано ниже, и я думаю, что мое решение будет работать и для этого:
<p class="numeric"> <%= text_field(:human, :age) %> </p>
2) Я думаю, что мое решение не будет работать для целочисленных полей вложенных моделей в форме нескольких моделей. (Райан Бейтс описывает такую работу в «Обработка нескольких моделей в одной форме» из «Расширенных рецептов Rails»).
Но если вы прочитаете статью Райана Бейтса, вы увидите, что он уже использует JavaScript. Итак, для работы с вложенными моделями в форме вам необходим JavaScript. Затем вы можете использовать JavaScript для проверки (как сказал Кундай). И у тебя не будет проблем. ;)
Но если у вас статическое число вложенных моделей в форме и вы не используете JavaScript, то я думаю, что вы можете создать новое конкретное регулярное выражение для ваших нужд (аналогично тому, которое я создал). Я надеюсь, что вы справитесь с этим. ;)
Надеюсь, я рассмотрел все сценарии, в которых у вас может возникнуть такая проблема, и мое решение будет полезно для кого-то, кроме меня. ;)