我正在使用 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" %>
</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 是空的