validation失败时渲染/重定向到新操作(rails)

我有一个表单,用户可以输入isbn,它会尝试查找书籍数据并保存。 当isbn查找validation失败时(例如,如果有人输入错误),我希望它重定向到另一种forms,如果isbn查找失败,用户可以手动输入数据(但如果其他validation如数字价格失败则不会)。

关于如何做到这一点的任何想法? 谢谢您的帮助!

试图了解你想要做的事情:如果我的假设是错误的,请纠正我。

如果由于ISBNvalidation失败而无法保存模型,并且您希望显示ISBN的表单,因为其他字段都可以,那么在此期间您可以执行一些操作来保存其他属性:

  • 在渲染表单时将它们输出为隐藏字段
  • 将它们存储在会话中,以便您可以重定向

如果您无法保存模型,则似乎没有任何理由重定向到另一个操作:用户仍在尝试完成create操作,除非您想要仅为ISBN呈现不同的表单。

以下是我使用session进行的操作,因此您可以根据需要调整此方法以重定向到另一个操作:

 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 

如果查找失败,我会给他们重新输入isbn的选项,因为它可能只是一个错字。

对于重定向部分:

 redirect_to invalid_input_path and return unless model.valid? redirect_to isbn_lookup_failed_path and return unless model.do_isbn_lookup ....