全文搜索与范围kaminari分页

时间:2014-04-04 08:43:21

标签: activerecord ruby-on-rails-4 full-text-search kaminari

我在简单的搜索表单和Heroku的全文搜索说明中使用了RailsCast,并使用了pg_search gem。

我正在尝试搜索我的微博,同时保留我为索引设置的范围。

这是我的microposts_controller.rb索引操作

def index
    #@microposts = Kaminari.paginate_array(Micropost.popular).page(params[:page]).per(25)
    @micropost  = current_user.microposts.build
    @microposts = Micropost.search(params[:query]).page params[:page]
end

注释掉的代码是我的代码,带有我想要的范围。它独立工作但无法搜索。 @microposts的新任命适用于搜索,但它使我的索引页面失去了我为它设置的“热门”范围。

这是微博的index.html.erb

<%= form_tag microposts_path, method: :get do %>
    <%= text_field_tag :query, params[:query], placeholder: 'Search for a micropost' %>
    <%= submit_tag "Search", name: nil, class: "btn btn-lrg btn-primary" %>
<% end %>
<%= render 'shared/public_feed' %>

_public_feed.html.erb

<% if @microposts.any? %>
  <ol class="microposts">
    <%= render partial: 'shared/feed_item', collection: @microposts %>
  </ol>
<% end %>
<%= paginate @microposts, :theme => 'twitter-bootstrap', :pagination_class => "pagination-sm" %>

micropost.rb

def self.popular
    reorder('votes desc').find_with_reputation(:votes, :all)
end

我不在乎搜索结果是否应用了“热门”范围,我只是希望在执行搜索之前首先访问索引页面以获得“热门”范围。我想也许有一个if语句我可以放在控制器或视图中的某个地方,但似乎没有任何工作。

1 个答案:

答案 0 :(得分:0)

为了使其正常工作,我从索引操作中删除了@microposts = Micropost.search(params[:query]).page params[:page]并将其放在搜索表单中

<%= form_tag microposts_path, method: :get do %>
    <%= text_field_tag :query, params[:query], placeholder: 'Search for a micropost' %>
    <%= submit_tag "Search", name: nil, class: "btn btn-lrg btn-primary" %>
       <% if params[:query].present? %>
          <% @microposts = Micropost.search(params[:query]).page params[:page] %>
       <% end %>
<% end %>