我正在使用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" %>
</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是空的
答案 0 :(得分:1)
您可以这样做:
cookies[:ids] = #All checked ids
然后要检索ID,您可以像这样轻松调用cookie:
cookies[:ids]
答案 1 :(得分:1)
现在把它放在视图中
<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']