如何在cookie中保存ID

时间:2013-08-02 14:11:08

标签: ruby-on-rails cookies

我正在使用will_paginate列出不同页面中的大量ammont文件。我还有一个check_box,以便为进一步分析选择文件。

控制器:

@files = FileDB.search(search_string).paginate(:per_page => 10, :page => params[:page]) 

视图:

  <button type="button" id="check_all">Check/Uncheck all</button>
 <%= button_tag :class => "btn btn-primary", :name => 'analyse' do %>Analyse<% end %>

    <% @filess.each do |file| %>
    <p><td> <%= check_box_tag "files[]", file.id %></td><%= file.name %></p>
    lala...

我的问题是我可以选择位于一个页面中的文件。因此,通过单击“选中/取消选中所有”,它不会检查所有可用文件,而是检查此特定页面的文件。我希望能够一起检查不同页面中的不同文件。

示例:页面上的10个文件,页面上的4个文件2.我想检查第1页的5个文件和第2页的所有文件,然后点击按钮“分析”,这9个文件必须一起分析,因此复选框应该记住来自不同页面的不同文件

我知道可以将ID保存在cookie中,但我在互联网上找不到任何操作方法。我只需要一个小例子

提前致谢

编辑:
或者有一个替代will_paginate使用POST?

edit2:根据Muntasim的说法

 <script type='text/javascript'>
               $('#check_all').on("click", function(){ $('input[type="checkbox"]').click(); });
            </script>
            <script src="/assets/rails.validations.js" type="text/javascript"></script>
            <script src="/assets/jquery.cookie.js" type="text/javascript"></script>
            <script type="text/javascript">
                var checkedIds = $.cookie('checked_file_ids');
                $('p td input[type=checkbox]').on('change', function () {
                   if($(this).is(':checked')) {
                       checkedIds.push($(this).val())
                   }
                    else  {
                       checkedIds.splice(checkedIds.indexOf($(this).val()), 1);
                   }
                    $.cookie('checked_file_ids', checkedIds);
                })

           </script>

          <%= form_for Group.new, url: what_to_do_files_path ,method: :get ,:validate => true do |f| %>
          <div class="field">
          <%=f.text_field :group_name, placeholder: "Group Name" %>&nbsp;&nbsp;
          </div>

          <%= button_tag :class => "btn btn-primary", :name => 'analyse' do %>Analyse<% end %>
          <button type="button" id="check_all" class="btn"> Check/Uncheck All</button>

          <% @files.each do |file| %>
           <p><td> <%= check_box_tag "files[]", file.id , false %></td><%= file.name %></p>

            <%end%>

    <%end%>

在控制器中:

def what_to_do
    ids_to_compare = cookies['checked_file_ids']
end

但是ids_to_compare是空的

2 个答案:

答案 0 :(得分:1)

您可以这样做:

cookies[:ids] = #All checked ids

然后要检索ID,您可以像这样轻松调用cookie:

cookies[:ids]

答案 1 :(得分:1)

如果你想使用cookie:

使用jquery.cookie

现在把它放在视图中

<script type="text/javascript">
var checkedIds = $.cookie('checked_file_ids');
$('p td input[type=checkbox]').on('change', function () {
   if($(this).is(':checked')) {
       checkedIds.push($(this).val())
   }
    else  {
       checkedIds.splice(checkedIds.indexOf($(this).val()), 1);
   }
    $.cookie('checked_file_ids', checkedIds);
})

 </script>

现在当你需要比较它们时,你可以获得id :(可能在控制器中)

ids_to_compare = cookies['checked_file_ids']