Railsアプリケーションのユーザーインデックスページに検索機能を配置しようとしています(Michael HartlのRailsチュートリアルと同様)。Ransackgemを使用して検索を行っています。これは、次のように実装したユーザー名の単純な検索です。
ユーザーコントローラー:
def index
@title = "All Users"
@search = User.search(params[:q])
@users = @search.result.paginate(page: params[:page])
end
インデックスビュー:
<%= search_form_for @search do |f| %>
<%= f.text_field :name_cont, id: :search_box %>
<%= f.submit "Search" %>
<% end %>
問題はこれです。インデックスページに移動して、実際にそこに表示されているユーザーを検索しても、表示されない場合があります。たとえば、Mrs。Linnie Bahringerは元のリストに表示されますが、「lin」を検索すると検索結果には表示されません。
[ここに写真を表示したかったのですが、さらに5つの評判ポイントが必要なため表示できません。]
当然のことながら、Ransackはどういうわけかクエリを失敗させていると思いました。ただし、@ users変数をページに出力すると、
<%= @users.each do %>
<% end %>
ビューに、「行方不明」のユーザーが名前のリストにあり、見よ、結果のリストに表示されます!
なぜこれが発生するのか、@ users変数の内容を画面に出力せずに「正しい」結果セットを取得する方法を知っている人はいますか?'='サインを@users.each do
ハックとして行から外そうとしましたが、動作は上記の問題で述べたものに戻ります。
あなたが与えることができるどんな助けにも前もって感謝します!
PS有用な場合に備えて、ビューファイル全体を表示する必要があります。
<% provide :title, 'All Users' %>
<h1>All Users</h1>
<div class="span3 offset9 btn-group">
<%= search_form_for @search do |f| %>
<%= f.text_field :name_cont, id: :search_box %>
<%= f.submit "Search" %>
<% end %>
</div>
<%= will_paginate %>
<!-- This bit is only in to show the value of @users -->
<%= @users.each do %>
<% end %>
<!-- Extra bit ends. -->
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>