2017-08-31 46 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