Rails 3. Оставив неправильное значение целочисленных атрибутов в форме - PullRequest
3 голосов
/ 06 ноября 2010

У меня есть модель ' Человек ', и эта модель имеет целочисленный атрибут : возраст .
Например, я использую проверку для этого целочисленного атрибута : возраст .

Когда я добавляю новое ' Человек ' с неправильным значением : возраст (например, "2aaa3" ), это возвращает меня с ошибкой, но это также сокращено: возраст как "2" .Но я этого не хочу.Я хочу оставить последнее неверное значение "2aaa3" .

Итак, вопрос «Как я могу это сделать?»

Ответы [ 2 ]

0 голосов
/ 22 января 2011

Привет всем, кто интересуется моим вопросом.

Я рад сообщить, что создал решение сам. Но у меня есть несколько замечаний по этому поводу. ))

Во-первых, решение:

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, то я думаю, что вы можете создать новое конкретное регулярное выражение для ваших нужд (аналогично тому, которое я создал). Я надеюсь, что вы справитесь с этим. ;)

Надеюсь, я рассмотрел все сценарии, в которых у вас может возникнуть такая проблема, и мое решение будет полезно для кого-то, кроме меня. ;)

0 голосов
/ 17 января 2011

Это стандартное поведение валидации в Rails.Не уверен, есть ли другие способы переопределить его.Однако вы можете выполнить эту проверку с использованием javascript, который будет гораздо более ориентирован на пользователя, чем при использовании validates_numericity_of.

...