рендеринг / перенаправление на новое действие при сбое проверки (rails) - PullRequest
0 голосов
/ 20 июня 2010

У меня есть форма, где пользователи могут ввести ISBN, и он попытается найти данные книги и сохранить их.Если при поиске isbn происходит сбой проверки (например, если кто-то ввел его неправильно), я бы хотел, чтобы он перенаправил в другую форму, где пользователи могут вводить данные вручную, если поиск isbn не удастся (но не в случае неудачи других проверок, таких как числовая цена).

Есть идеи, как это сделать?Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 20 июня 2010

Пытаясь понять, что вы пытаетесь сделать: поправьте меня, если мои предположения неверны.

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

  • Выводите их как скрытые поля при отображении формы
  • Храните их в сеансе, чтобы вы могли перенаправить

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

Вот как я могу это сделать, используя сеанс, поэтому вы можете адаптировать его для перенаправления на другое действие, если вам нужно:

def create
  book = Book.new( params[:book].reverse_merge(session[:unsaved_book]) )
  if book.save?
    session.delete[:unsaved_book]
    flash[:notice] = 'I love it!'
    redirect_to book
  else
    if book.errors.on[:isbn] && book.errors.length == 1
      session[:unsaved_book] = params[:book]
      flash[:error] = 'Sorry, wrong ISBN number.'
      render 'unknown_isbn'
    else
      flash[:error] = 'Check your inputs.'
      render 'new'
    end
  end
end
0 голосов
/ 20 июня 2010

Я бы дал им возможность повторно ввести ISBN, если поиск не удался, поскольку это может быть просто опечатка.

Для перенаправляющей части:

redirect_to invalid_input_path and return unless model.valid?
redirect_to isbn_lookup_failed_path and return unless model.do_isbn_lookup
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...