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

时间:2010-06-19 22:36:07

标签: ruby-on-rails ruby validation

我有一个用户可以输入isbn的表单,它会尝试查找图书数据并保存。 当isbn查询验证失败时(例如,如果有人输入错误),我希望它重定向到另一种形式,如果isbn查找失败,用户可以手动输入数据(但如果其他验证如数值失败则不会)。

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

2 个答案:

答案 0 :(得分:1)

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

如果由于ISBN验证失败而无法保存模型,并且您希望显示 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

答案 1 :(得分:0)

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

对于重定向部分:

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