0

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

1 に答える 1

0

さて、私は少しこぶを感じます。しばらく別の問題に取り組んだ後、間違った情報の表示だけかもしれないと思いました。案の定、HTMLソースをチェックしたとき(質問を投稿する前に忘れてしまったことに驚いています)、「行方不明」のユーザーがそこにいました。

リストの上のdivに改行なしのスペースを入れて(@users.each doビットがある場所のほとんど)、そのdivのCSSを設定して問題を解決しclear: both;ました。

これが私の更新されたビューです:

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

<div id="clear-space">
&nbsp;
</div>

<div id="all_users_list">
<%= will_paginate %>
<ul class="users">
    <%= render @users %>
</ul>
<%= will_paginate %>
</div>

私が言うように、それは愚かな間違いでしたが、私たちは皆、少なくとも1日に1回はチャンプです!

于 2013-01-13T12:28:50.550 に答える