Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Kaminari对搜索结果分页_Ruby On Rails_Pagination_Kaminari - Fatal编程技术网

Ruby on rails 使用Kaminari对搜索结果分页

Ruby on rails 使用Kaminari对搜索结果分页,ruby-on-rails,pagination,kaminari,Ruby On Rails,Pagination,Kaminari,在过去的两个小时里,我一直在尝试这样做,但没有成功,我相信这是一件非常简单的事情:) 所以,我有一个表单,用户可以根据一些关键字搜索内容。以下是表格代码: <%= form_tag search_by_description_path,:method => "get" do %> <div class="column span-3"> <label>Search</label> <

在过去的两个小时里,我一直在尝试这样做,但没有成功,我相信这是一件非常简单的事情:)

所以,我有一个表单,用户可以根据一些关键字搜索内容。以下是表格代码:

<%= form_tag search_by_description_path,:method => "get" do %>
        <div class="column span-3">
            <label>Search</label>
        </div>

        <div class="column span-5">
            <input type="text" name="search_keywords" id="search_keywords"/>
        </div>

        <div class="column span-6">
            <%= collection_select :category,:id,Category.all,:id,:name,:include_blank => "Everything" %>
        </div>

        <div class="column span-3">
            <%= submit_tag "search" %>
        </div>

    <% end %>
我在控制器中有这个:

def search_by_description
    category    = params[:category_id]
    kw          = params[:search_keywords]
    @results = Posts.where("description LIKE ?","%#{kw}%").page(params[:page])
end
忽略我没有跟踪
类别id
这一事实。我认为:

<%= render "results",:locals => {:results => @results} %>
<%= paginate(@results) %>
而对于第二种情况:

SELECT COUNT(*) FROM "posts" WHERE (description LIKE '%lorem%') LIMIT 25 OFFSET 25

请给我一些建议,我不想求助于写我自己的页码:)

从我的角度来看,这是一个错误或误用。我认为:

<% if results.size > 0 %>
   ...
<% else %>
   <p>No results found</p>
<% end %>
0%>
...
未找到任何结果


对于不同于第一个页面的页面,
else
子句总是这样。如果我将
results.size
更改为
results.all.size
它会工作。但是,我不明白为什么它不能直接用于
结果。大小

从我的角度来看,这是一个bug或误用。我认为:

<% if results.size > 0 %>
   ...
<% else %>
   <p>No results found</p>
<% end %>
0%>
...
未找到任何结果


对于不同于第一个页面的页面,
else
子句总是这样。如果我将
results.size
更改为
results.all.size
它会工作。但是,我不明白为什么它不能直接处理
结果。size

这个问题的根本原因是ActiveRecord 3.0的bug,它将在ActiveRecord 3.1中修复

我在Kaminari上做了一个monkeypatch来使用ActiveRecord 3.0


简而言之,将您的Kaminari gem更新为最新版本将解决您的问题。谢谢

这个问题的根本原因是ActiveRecord 3.0的bug,它将在ActiveRecord 3.1中修复

我在Kaminari上做了一个monkeypatch来使用ActiveRecord 3.0


简而言之,将您的Kaminari gem更新为最新版本将解决您的问题。谢谢

您确定搜索返回的匹配项超过25个吗?是。我存储了43个对象,查询返回了41个。我觉得奇怪的是,第一页所有41个都返回了,第二页一个也没有返回。很不幸,我没有看到你的代码有任何问题(不是说它不在那里,我只是看不到)。第二页的SQL看起来是正确的——Kaminari在第一个请求中使用了额外的SQL行来计算总共有多少页,但是我相信它在会话中得到了,所以它不需要再次查询。您是否尝试过在控制台中复制为第2页生成的SQL以查看返回的内容?另外,考虑在你的视图中的某个地方调试(@结果),看看它说了什么。好的,非常奇怪的事情发生了。很奇怪。如果我将
调试(@results)
放在视图中,第二页也会分页。如果我把它拿走,它就不见了。现在我完全迷路了。你确定你的搜索返回超过25个匹配项吗?是的。我存储了43个对象,查询返回了41个。我觉得奇怪的是,第一页所有41个都返回了,第二页一个也没有返回。很不幸,我没有看到你的代码有任何问题(不是说它不在那里,我只是看不到)。第二页的SQL看起来是正确的——Kaminari在第一个请求中使用了额外的SQL行来计算总共有多少页,但是我相信它在会话中得到了,所以它不需要再次查询。您是否尝试过在控制台中复制为第2页生成的SQL以查看返回的内容?另外,考虑在你的视图中的某个地方调试(@结果),看看它说了什么。好的,非常奇怪的事情发生了。很奇怪。如果我将
调试(@results)
放在视图中,第二页也会分页。如果我把它拿走,它就不见了。现在我完全迷路了。嗯,很高兴你找到了它!是的,我也是!谢谢你的支持!嗯,很高兴你找到了!是的,我也是!谢谢你的支持!
<% if results.size > 0 %>
   ...
<% else %>
   <p>No results found</p>
<% end %>