Пытаясь понять, что вы пытаетесь сделать: поправьте меня, если мои предположения неверны.
Если вы не можете сохранить модель, потому что 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