在将此标记为重复之前。这个答案对我不起作用:
Prevent user going back and viewing previously submitted form Rails
我想阻止,用户可以返回之前提交的付款表单。
我缺少什么?这应该是一件容易的事吗?我的错是什么?
这是一些形式:
<%= form_for :job, method: :post, url: {action: "create"} do |f| %>
<div class="infogroup">
<h5>Informationen zum Job</h5>
<p>Was für ein Job bieten Sie?</p>
</div>
<div class="form-group">
<%= label_tag(:jobtitle, "Jobtitel*") %>
<%= text_field_tag(:jobtitle) %>
</div>
<div class="form-group">
<%= label_tag(:jobtype, "Anstellungsgrad*") %>
<%= text_field_tag(:jobtype) %>
</div>
<div class="form-group">
<%= label_tag(:place, "Ort*") %>
<%= text_field_tag(:place) %>
</div>
[...]
这是控制器代码:
class JobsController < ApplicationController
require 'date'
def new
@job = Job.new
end
def create
@job = Job.new(article_params)
@job.save
redirect_to @job
end
private def article_params
d = Date.new();
d.strftime('%a %d %b %Y')
params.permit(:jobtitle, :jobdescription, :jobtype, :place, :company, :paid, :userid, d)
end
def show
@job = Job.where(id: params[:id])
end
end
答案 0 :(得分:0)
我看到了以下方法,以确保不会再次保存付款。
单击“保存”按钮时附加新的隐藏输入,并验证该参数是否存在。如果存在,则重定向
# JavaScript
$('#the_form button').on('submit', function() {
this.preventDefault();
this.parent.append('<input type="hidden" name="human_hit" value="yes" />');
this.parent.submit();
})
# Controller
def create
if params[:human_hit]
redirect_to :show, alert: "Payment already done!"
else
# Do save logic
end
end
答案 1 :(得分:0)
在这里你可以使用referer标题。只需检查即将来自哪个页面。
例如:
用户在付款表格,上一页说用户详细信息,然后来自它的引用将是用户详细信息。如果用户不是用户详细信息,只需将其他页面重定向到您想要的位置。