加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – 用户在创建对象后按“返回”,创建重

发布时间:2020-12-16 23:21:16 所属栏目:百科 来源:网络整理
导读:我遇到问题,当用户填写我的评估表单时,单击“创建”,然后单击浏览器的后退按钮,进行一些编辑,再次单击“创建”,它将创建重复的评估. 什么是防止这种事情发生的最好方法. 在创建时,每个survey_criterion只应存在一个评估.我不希望用户在点击后退按钮后丢失他
我遇到问题,当用户填写我的评估表单时,单击“创建”,然后单击浏览器的后退按钮,进行一些编辑,再次单击“创建”,它将创建重复的评估.

什么是防止这种事情发生的最好方法.

在创建时,每个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读