2017-08-31 47 views
1

我有一个重定向工作正常,让我到我的索引。它是如下:Rails - 进入索引,但也提交表单与同样的点击

redirect_to action: :index, filters: { recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}" }, hide_filters: true 

事情是,我在填充点击过滤器。在同一页面上有一个标签为提交操作的按钮。

这里是HAML的摘录(这是八九不离十有点儿像ERB ......不要担心太多就可以了,只要注意它是如何类型:提交)包含它的文件:

%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' } 
    %span.glyphicon.glyphicon-play 
    Update List 

点击上面的按钮提交表单,应用过滤器将一些结果放在屏幕上的表格中。

这是/一切都很好 - 但有一个新的要求,我希望提交按钮被“自动点击”重定向。 AKA,我不想手动点击这个按钮......相反,作为重定向的一部分,表单需要提交。所以,当页面加载时,它是如果我刚刚点击了按钮 -​​ 数据填充等。你们都知道这是可能的/我会怎么做?我已经通过redirect_to行动的文档挖掘,希望我能在那里找到一些帮助 - 但是现在还没有骰子。

UPDATE:

我说:

document.querySelector('.button.btn.btn-primary.btn-sm').click(); 

走上HAML在像这样的文件的末尾:

:javascript 
    document.querySelector('.button.btn.btn-primary.btn-sm').click(); 

它提交负载形式......但事实证明,我的索引页面必须反复重新渲染...重复点击按钮。它不会只做一次。想知道是否有某种方法可以将这个绑定到onload上。

更新2:

所以我写了

firstSubmit = function() { 
    document.querySelector('.button.btn.btn-primary.btn-sm').click(); 
}; 
$(document).on('page:load', firstSubmit); 

问题是...看来我的网页被反复重装本身。那么,它一遍又一遍地传播我的按钮,导致页面的总流量。无论如何限制这个没有得到真正janky(全球变种? - 我讨厌)?

回答

2

您可以添加标志变量,以形成(假设表单操作重定向到index):

= hidden_field_tag :do_not_redirect 
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' } 
    %span.glyphicon.glyphicon-play 
    Update List 

然后修改的javascript:

- unless params[:do_not_redirect] 
    :javascript 
    $(document).on('page:load', function() { 
     $('#do_not_redirect').val(1); 
     $('.button.btn.btn-primary.btn-sm').click(); 
    }); 

和控制器:

redirect_to action: :index, filters: { 
    recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}" 
}, hide_filters: true, do_not_redirect: params[:do_not_redirect].presence 
+0

嘿那里 - 所以我有点天真地把这个代码,迄今,没有骰子。但想问一下这是如何调用?如果do_not_redirect作为标志变量绑定到我的按钮,是不是这样,因为人没有按下按钮(理想情况下 - 希望它在没有按下按钮的情况下加载),它永远不会被填充,因此,表单从不提交?我想如果我能更好地理解我们在这里要做的事情,我可以把它们合在一起/弄清楚如何让它在我的情况下运行。 – PinkElephantsOnParade

+0

当页面加载并提交表单时,会自动设置'do_not_redirect'字段;控制器检查是否存在do_not_redirect POST参数,并重定向到在GET参数中使用此标志的索引;当标志出现时,javascript不会出现,并且表单只会提交一次。 – Inpego

0

我想你想要做的就是利用回调。不确定你是否熟悉,但回调只是在发生其他行为后执行的例程。在这种情况下,当你点击提交按钮(这很可能是after_save或after_commit回调)后,你想重定向到索引。回调通常在这样的情况下,发现在控制器的顶部,类似如下:

class SomeController < ApplicationController 
    after_save :go_to_index 

然后,你的正常控制器操作后:

private 
    def go_to_index 
     // Redirect code 
    end 

我想这是你”重新寻找,你可以在这里找到回调API信息:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

嘿,我其实不想按钮被按下。从本质上讲,我希望模拟按钮按钮 - 我希望一按按钮就能在您登陆页面时立即“自动”。 – PinkElephantsOnParade

+0

它不是通向目标网页吗? – DudeMontag