1

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

控制器:

@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...

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

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

我知道可以将 id 保存在 cookie 中,但我在互联网上没有找到如何做到这一点。我只需要一个小例子

提前致谢

编辑:
或者也许有使用 POST 的 will_paginate 的替代方法?

编辑2:根据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 是空的

4

2 回答 2

1

你可以简单地做:

cookies[:ids] = #All checked ids

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

cookies[:ids]
于 2013-08-02T14:40:19.940 回答
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']
于 2013-08-02T14:41:40.430 回答