私はこれを達成する方法を理解するのに苦労しており、多くの人がこの質問をしても答えがないようです. 郵便番号を含む users テーブルがあります。米国のすべての郵便番号と緯度/経度を含む zips テーブルを作成しました。
私がやりたいことは、ユーザーが他のユーザーを検索できるように、2 つを接続することです。Thinking Sphinx を持っていますが、引き続き使用したいと考えています。検索する距離 (5、10、25、50、100、500 マイル) のチェックボックスをユーザーに提供したいと考えています。結果は常に最も近いユーザーを返す必要があります。
これにはコントローラーやモデルのコードは必要ないと思いますが、必要な場合はお問い合わせください。提供します。
検索フォーム:
<%= form_tag searches_path, method: :get do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= button_tag "Search", name: nil %>
</p>
<% end %>
<P><%= link_to "Advanced Search", new_search_path %><p>
<%= form_tag users_path, method: :get do %>
<%= label :zip_code, "Enter zip code: " %>
<%= text_field_tag :zip_code, params[:zip_code] %>
<% end %>
/indices/user_index.rb:
ThinkingSphinx::Index.define :user, :with => :active_record do
# fields
indexes name, :as => :user, :sortable => true
indexes religion, zip_code, about_me, career, sexuality, children, user_smoke, user_drink, gender, ethnicity, education
# attributes
has id, created_at, updated_at
has zips.city, :as => :zip_city
has "RADIANS(zips.lat)", :as => :latitude, :type => :float
has "RADIANS(zips.lon)", :as => :longitude, :type => :float
end
ユーザーモデル:
has_and_belongs_to_many :zips
ジップモデル:
class Zip < ActiveRecord::Base
attr_accessible :city, :lat, :lon, :code, :zipcode
has_and_belongs_to_many :users
validates :code, uniqueness: true
self.primary_key = 'code'
def self.code(code)
find_by(:code => code)
end
end
ユーザー テーブルには次の列があります: zip_code
.
郵便番号テーブルには次の列があります: code
、city
、state
、lat
、lon