我有一个用户可以输入isbn的表单,它会尝试查找图书数据并保存。 当isbn查询验证失败时(例如,如果有人输入错误),我希望它重定向到另一种形式,如果isbn查找失败,用户可以手动输入数据(但如果其他验证如数值失败则不会)。
关于如何做到这一点的任何想法?谢谢你的帮助!
答案 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
....