ruby-on-rails – Rails – 用户在创建对象后按“返回”,创建重
我遇到问题,当用户填写我的评估表单时,单击“创建”,然后单击浏览器的后退按钮,进行一些编辑,再次单击“创建”,它将创建重复的评估.
什么是防止这种事情发生的最好方法. 在创建时,每个survey_criterion只应存在一个评估.我不希望用户在点击后退按钮后丢失他们输入的任何数据,用新内容填写表单,然后再次单击“创建”. UPDATE 的routes.rb resources :survey_criteria do resources :groups do resources :evaluations end end survey_criterion.rb has_many :evaluations evaluation.rb belongs_to :survey_criterion belongs_to :group 有更复杂的关联,但我正在寻找的答案更多,“当用户按下’返回’按钮,修改表单,然后再次单击创建时,如何处理它. 我希望它更新我认为在这个实例中自动创建的那个,而不是向用户抛出错误.我知道我可以添加一个错误的验证,但我希望这对我认为的用户是不可见的. 思考? 解决方法
最简单的解决方案是更改create action,它应该像这个伪代码一样工作:
def create # ... if evaluation_exists? update_evaluation(params[:evaluation]) else create_evaluation(params[:evaluation]) end # ... end 至于你的问题“当用户按下’返回’按钮时,如何处理它,然后再单击再次创建”,然后我使用一些随机标记(一个短字符串)放置为表单中的隐藏字段. 当创建请求到来时,我检查此令牌是否已存储在会话中.如果不是,那么我创建对象,并将该标记添加到已使用的标记列表中.如果令牌已经存在于会话中,我知道用户刚刚重新提交了表单,我可以采取相应的行动.通常我会问他是否应该创建另一个对象.在会话中我通常不会存储3-5个令牌. 它看起来像这样(是的,这只是一个例子): def create token = params[:token] session[:tokens] ||= [] if session[:tokens].include? token render_the_form_again( "You have already created the object. Want another?" ) else create_the_object session[:tokens] << token end # ... end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |