Отображение сообщения об ошибке с Sinatra - PullRequest
7 голосов
/ 21 августа 2011

Я пишу простое приложение, которое принимает стандартный ввод от пользователя. Что касается записи электронной почты, я должен проверить, находится ли она в стандартном формате электронной почты, а затем перечислить следующие проблемы, когда будет сохранен новый экземпляр:

u = User.new
u.email = params[:email]
u.save
if u.save
  redirect '/'
else
  u.errors.each do |e|
    puts e
  end
end

Я знаю, что если это правильно, он должен вернуться на домашнюю страницу. Если это не так, я хочу, чтобы он также возвращался на домашнюю страницу, но я хочу, чтобы он возвращал значение ошибки (чтобы у меня могло быть всплывающее окно или просто что-то на экране, сообщающее пользователю, что формат письма был неправильным ). Как лучше всего это сделать?

Ответы [ 2 ]

11 голосов
/ 24 августа 2011

Вы можете использовать гем ' sinatra-flash ' для отображения всех видов ошибок / уведомлений и т. Д.

u = User.new
u.email = params[:email]
u.save
if u.save
  redirect '/'
else
  flash[:error] = "Format of the email was wrong."
  redirect '/'
end

Затем вам нужно указать, где вы хотите, чтобы отображалась вспышка [: error]. Обычно я помещаю это в файл layout.haml или (erb) прямо выше, где я даю содержание.

layout.haml:

- if flash[:error]
  %p
    = flash[:error]

Также убедитесь, что вы включили гем и включили сеансы

require 'sinatra'
require 'sinatra/flash'

enable :sessions

Вы также можете попробовать камень ' rack-flash '. Есть руководство по его использованию на http://ididitmyway.heroku.com/past/2011/3/15/rack_flash_/

2 голосов
/ 21 августа 2011

Вы можете сохранить потенциально дорогостоящее путешествие туда и обратно, сделав это в Javascript. На мой взгляд, простая проверка, подобная этой, - это клиентская функция, обрабатываемая некоторым кодом, прикрепленным к событию onBlur, а не то, что мне нужно проверять на моей стороне (за исключением, конечно, очистки).

Чтобы напрямую ответить на ваш вопрос, я использовал обычные переменные экземпляра для хранения «массива ошибок» в @errors. Ошибки, связанные с формой, или ошибки, которые должны отображаться в определенном месте на странице, а не наверху, сохраняются в @form_errors или в чем-то подобном. Затем шаблон проверяет наличие ошибок и отображает их соответствующим образом.

...