2013-08-06 52 views
0

我正在使用will_paginate以列出大量文件。我也有一個check_box爲了選擇文件進行進一步的分析。 要保存的ID在cookie而改變我以前的網頁以下的javascript:在Cookie中保存ID並將它們傳遞給ruby

<script src="/assets/jquery.cookie.js" type="text/javascript"></script> 
      <script type="text/javascript"> 
var checkedIds = [] 

$('.checkmeplease').on("change", function(){ 

    if($(this).is(':checked')) { 
     checkedIds.push($(this).val()) 

    } 
    else { 
     checkedIds.splice(checkedIds.indexOf($(this).val()), 1); 

    } 
    $.cookie('checked_file_ids', checkedIds,{path:'/'}); 
}); 


</script> 

我的複選框:

<% @files.each do |file| %> 
<p><td> <%= check_box_tag "files[]", file.id,false,:class=>'checkmeplease' %></td>&nbsp;&nbsp;<%= file.name %></p> 
<%end%> 

它節省的ID,但是當我改變頁面will_pagination,保存標識消失。 我不會加載之前從cookie中保存的ID。我發現有關如何將JavaScript變量傳遞給ruby或如何在ruby中捕獲$.cookie('checkedIds')的信息很少。

這怎麼可能呢? 非常感謝。

回答

0

你不能通過 JavaScript變量爲Ruby或其他任何事情。

在這種特殊情況下,您可以在服務器(ruby)端訪問您之前在客戶端使用Javascript設置的「checkedIds」cookie值。在Rails中,就像cookies[:checkedIds]

在紅寶石方面,使用cookie的值來生成您選擇的內容。

+0

在ruby中使用cookie [:checkedIds]或cookie的值將只給我從最後一頁保存的ID。來自第一頁的ID被覆蓋。通過更改頁面和複選新文件,cookie的值將被覆蓋,所以我無法訪問所有頁面中已檢查的所有文件。我不知道如何加載以前存儲的ID並將它們保存在javascript/rails或ruby中,以便在最後我將擁有所有已檢查的ID – Tonja

+0

好吧,如果您想要存儲id在每次檢查後你可以使用ajax - 在每次點擊時發送檢查過的id,並將其保存在ruby一側(在數據庫或其他方面)),或者你可以進行某種限制,在那裏你保存一個被點擊的列表id-s並且每隔一段時間發送它們。其他想法可能涉及使用多個cookie(例如每頁一個cookie,每個cookie存儲該頁面上單擊的id的列表)或使用一個大cookie(提防4K限制)以及所有被點擊的id的列表。 – WTK

+0

多個餅乾會很好,但我不知道如何檢測will_paginate中的當前頁面,以及如何在更改JavaScript時加載新頁面時將javascript分開,因此預配置信息將丟失。 Ajax會很好,但我想這需要更多的工作和時間,因爲我將不得不檢查選中的文件是否未被檢查並重新加載ajax。節流?檢查ID的列表將是很好的,但我正在做與上述JavaScript alreafdy我的問題只是,我不加載以前的id – Tonja

相關問題