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 %>