阻止用户返回并使用Rails查看以前提交的付款表单

时间:2018-02-13 11:12:29

标签: ruby-on-rails ruby forms

在将此标记为重复之前。这个答案对我不起作用:

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

2 个答案:

答案 0 :(得分:0)

我看到了以下方法,以确保不会再次保存付款。

  1. 使用一些作业属性并在创建作业期间检查它们并重定向到显示。
  2. 单击“保存”按钮时附加新的隐藏输入,并验证该参数是否存在。如果存在,则重定向

    # 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标题。只需检查即将来自哪个页面。

例如:

用户在付款表格,上一页说用户详细信息,然后来自它的引用将是用户详细信息。如果用户不是用户详细信息,只需将其他页面重定向到您想要的位置。