我在简单的搜索表单和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语句我可以放在控制器或视图中的某个地方,但似乎没有任何工作。
答案 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 %>