gpt4 book ai didi

ruby-on-rails - Rails - 用户在创建对象后按下 'Back',创建重复项

转载 作者:行者123 更新时间:2023-12-04 06:35:20 26 4
gpt4 key购买 nike

我遇到了一个问题,当用户填写我的评估表时,单击“创建”,然后单击浏览器的后退按钮,进行一些编辑,然后再次单击“创建”,它会创建重复的评估。

防止此类事情发生的最佳方法是什么。

只有一个 evaluation每个 survey_criterion 都应该存在关于创作。我不希望用户在点击后退按钮、使用新内容填写表单并再次单击“创建”后丢失他们输入的任何数据。

更新

路由文件

resources :survey_criteria do
resources :groups do
resources :evaluations
end
end

调查标准.rb
has_many :evaluations

评价.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

至于你的问题 “当用户按下'返回'按钮,修改表单,然后再次单击创建时,如何处理它” ,然后我使用一些 随机 token (短字符串)作为隐藏字段放置在表单中。

当创建请求到来时,我检查这个 token 是否已经存储在 session 中。如果不是,那么我创建该对象,并将该标记添加到已用标记列表中。如果 session 中已经存在 token ,我知道用户刚刚重新提交了表单,我可以采取相应的行动。通常我会问他是否应该创建另一个对象。在 session 中,我通常存储不超过 3-5 个 token 。

它看起来像这样(是的,这只是一个例子):
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

关于ruby-on-rails - Rails - 用户在创建对象后按下 'Back',创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com