2016-08-26 17 views
1


ジオコーダを使用した検索フォームにフィルタを追加する方法についていくつかのアドバイスをしたいと思います。Rails検索ジオコーダへのフィルタの検索と追加


私はUserモデル動物モデル(動物は型引数を得た)
そしてはテーブルに参加しました:Animal_ID/user_idをAnimal_User

右今、私は都市の周りのキロメートルの選択肢を持つ都市の周りのユーザーを見つけることができます。うまくいきます。

私はそれは素晴らしい:)

検索このようになりますでしょう、動物の種類にフィルタを追加したいと思います:犬

多くのおかげで:ロンドン> 10KM>タイプでフィルターあなたがそれをどうやって行うかについてのアイデアを垣間見るならば、事前に。検索htmlとコントローラが見つかります。あなたはユーザーモデルまたは動物モデルを必要とする場合、私はあまりにもそれを投稿することができます

search.html.erb

<div class="search-bar"> 
<%= form_tag search_path, :class => "webdesigntuts-workshop", method: :get do %> 
    <%= label :user, "" %> 
    <%= text_field_tag :city, params[:city], placeholder: 'City', :input_html => { :value => 'Paris' } %> 

    <%= label :distance, "" %> 
    <%= text_field_tag :distance, params[:distance], placeholder: 'km', :input_html => { :value => '10' } %> 

    <%= submit_tag "Search" %> 
<% end %> 
</div> 

検索コントローラ

class SearchsController < ApplicationController 
    def search 
    if params[:city].present? 
     @searchs = User.near(params[:city], params[:distance] || 10).where("id != ?", current_user.id) 
    else 
     @searchs = User.all.where("id != ?", current_user.id) 
    end 
    end 

end 

答えて

0

これを試してみてください(関連がけれども、それは本当に標準HAS_MANY/has_manyのです) 、私はActive Record Queryingにそれを基づかよ:

User.joins(:animals).where(id: current_user.id, animals: {type: params[:animal_type]}).near(params[:city], params[:distance] || 10) 

これはあなたのことを前提としていrユーザモデルhas_many:animals(このようなRailsモデルDSLを書くことができるのは素晴らしいです)

+0

私はそれがうまくいくと思います、ありがとう、もう少しテストしなければなりませんが、非常にシンプルで効率的です;) –

+0

私は '.where(id:current_user.id')に関する質問をしています。その結果、それはcurrent_userだけを表示し、他のユーザーはdifferentsではありませんでした。私はこれを試しました。 "(" id!=? "、current_user.id) 'しかし、それは動作していません。ありがとう、私は近いです;)、私はその上で検索を続けます –

+0

ああ、current_userは通常あなたの認証システムによって提供されるメソッドであり、実際に現在ログインしているユーザーを返します。あなたの検索フォームにユーザーコレクションの選択項目を追加し、他のユーザーが検索する場合は、current_user.idの代わりにparams [:user_id]と一致するものを使用してください。 – Baradzed

関連する問題