Да, вы всегда должны проверять свои параметры. Люди всегда могут возиться с параметрами в адресной строке своего веб-браузера или изменять параметры, хранящиеся в DOM. Другой пример, где параметры могут быть завинчены, - это если веб-страница остается открытой долгое время. Представьте, что кто-то просматривает страницу «/ users/3/edit» и оставляет ее открытой в течение часа, а затем обновляется. В то же время пользователь может быть удален. Вы не хотите, чтобы ваш сайт разбился - он должен обработать это изящно.
В зависимости от вашей базы данных и адаптера, User.find_by_id("test")
не будет разбиваться. Но ваша база данных/адаптер не смог преобразовать строку в целое. В этом конкретном случае вы можете использовать метод Ruby's .to_i
.
User.find_by_id(params[:id].to_i)
Если params[:id] = "12"
, Ruby будет преобразовывать, что целое число 12
и код будет работать нормально. Если params[:id] = "test"
, Ruby будет преобразовывать, что целое число 0
, и вы никогда не должны иметь запись в базе данных с идентификатором 0.
Вы также можете использовать regular expressions to test if a string is an integer.
Но в общем, да, попытайтесь всегда проверить свои параметры таким образом, вы можете обрабатывать ошибки грациозно и контролировать данные поступают.
Вот что модель валидация для. – usha
Что вы пытались и чего вы ожидаете? Как вы «нарушили параметры»? Это слишком расплывчато. Кроме того, у Vimsha есть точка: почему вы не используете проверки модели? – Mischa
@ Vimsha В этом случае валидация модели не будет работать. Я считаю, что спрашивающий говорит, если они переходят к «/ users/1/edit», это нормально, но если они переходят к «/ users/test/edit», это вызывает эту ошибку, потому что строка «test» не может быть преобразуется в целое число, чтобы выполнить 'User.find_by_id'. Это не имеет никакого отношения к проверке модели. – MrDanA