【问题标题】:How to save ids in the cookies如何在 cookie 中保存 id
【发布时间】:2013-08-02 14:11:07
【问题描述】:

我正在使用 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 的替代方法?

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 是空的

【问题讨论】:

  • 在这种情况下,您应该使用 session 而不是 cookie。 session[:file_db][:checked_ids] 之类的东西将包含 FileDB 对象的所有检查 id。
  • @MrYoshiji 仅此而已?没有javascript等等?
  • 这取决于您的需要,如果您想更改页面(并在会话中保存选定的 ID)而不重新加载页面,这里的 javascript 会很有趣。您希望我发布一个带有 FileDB ID 的基本会话存储示例吗?
  • @MrYoshiji 我想更改页面而不重新加载页面。如果您能发布一个示例,那就太好了

标签: ruby-on-rails cookies


【解决方案1】:

你可以这样做:

cookies[:ids] = #All checked ids

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

cookies[:ids]

【讨论】:

    【解决方案2】:

    如果你想使用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']
    

    【讨论】:

    • 我不知道如何将我的已检查 ID 传递给“VALUE”。它不会自动发生,而且我需要在更改页面时多次传递它
    • 我在edit2中发布了您的解决方案。我收到一个错误,变量“cookie”未定义
    • 尝试 ids_to_compare = cookies['checked_file_ids'] 我错过了 s,它会是 cookies['key'] 而不是 cookie['key']
    • 我试过了,我想看看 IDS 保存了什么,所以我输入了 puts(ids_to_compare),它什么也没打印,所以它是空的
    • 您可以在设置cookie后在客户端进行检查。使用 console.log($.cookie('checked_file_ids'))
    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多