11

Ruby on Rails は初めてで、初めてのサイトを作成しています。firstnamelastnameおよびの 3 つの列を持つユーザー モデルがありemailます。私はランサックを使用して検索エンジンを作成しています。すべての列を通過して結果を表示する 1 つの検索フィールドが必要です。

次のようなuser_controller.rbを作成しました。

@q = User.search(params[:q])
@users = @q.result(:distinct => true)

そして、私のUser\index.html.erbは次のようになります。

<%= search_form_for @search do |f| %>
  <div class="field">
    <%= f.label :firstname_cont , "Firstname" %>
    <%= f.text_field :firstname_cont %>
    <%= f.label :lastname_cont , "Lastname" %>
    <%= f.text_field :lastname_cont %>
    <%= f.label :email_cont , "Email" %>
    <%= f.text_field :email_cont %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>

3 つの検索フィールドが表示されますが、名前、姓、電子メールを通過するフィールドが 1 つだけ必要です。

編集 1: さらにテストした結果、検索フィールドで名と姓の両方、または空白を処理できないことがわかりました。次のような helper_method を作成できることを読みました: Ransack で複数のフィールドを検索する

そして、検索結果を取得すると、モデル インデックスなどにスローされます: user / index. これはどこで変更できますか?

しかし、ビューでそれを使用する方法については何もありません。どうしてただうなずくのがとても難しいのですか、これがあなたのすることです:コントローラーでこれを行います->モデルでこれを行います->ビューでこれを行います->そして、このようにルートを修正することを忘れないでください->

4

1 に答える 1

25

まず、質問する前に、gem ドキュメントを少し検索して、少しグーグルで検索してみてください ^_^.

最初に参照するのは github ページです: https://github.com/ernie/ransack

ここで Ransackのデモ ページを見ると、次のようになりますこの行が表示されるページ

<input id="q_first_name_or_last_name_cont" name="q[first_name_or_last_name_cont]" size="30" type="text" />

これにより、使用する正しい述語についてのアイデアが得られます。ここでそれらのリストを取得することもできます: https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb (常にgemにあります) github のドキュメント)。

それに基づいて、あなたの見解でそのようなことをすることができます

<%= f.text_field :lastname_or_first_name_or_email_cont, :placeholder => 'full name or email contains' %>

デモ ページで再度確認できるように、「OR 条件」クエリを生成します (生成されたクエリは従来の SQL クエリとして表示されます)。

お役に立てれば

乾杯

于 2013-03-16T11:26:51.363 に答える