2013-07-30 34 views
0

我試圖從給定位置附近獲得用戶的工作。我有用戶的經度和緯度(我正在從他們的地址中刪除)。搜索附近的位置,國家名稱不能與地理編碼

現在,當我在尋找一個術語,如「NC」的展示它的一些成果,但是,當我與國名「團結狀態」搜索,它必須顯示所有的結果,而是它不顯示任何結果。

我使用Geocoder寶石這一點。 下面是我在做什麼:

控制器:

@user = User.near(params[:search], 20, :order => :distance) 

型號:

geocoded_by :address1 

查看:

Displaying all the results returned from @user 

任何想法我應該做的,這樣它會返回所有結果,即使我用國家名搜索。

+0

請問,如果你把在更具體的搜索項工作? (紐約例如?) –

+0

@MichaelSzyndel是的,它適用於特定的條款,如果我使用的是郵政編碼。 –

+0

那麼使用地理編碼搜索國家有什麼意義? –

回答

1

當地理編碼器收到類似「美國」,它將搭載一個單一的中心座標對,然後從中進行搜索。因此,就您而言,它將在距離美國中心20英里範圍內搜索用戶。

你想要做什麼,是進行地理編碼搜索,然後找出它是哪種類型的輸入(國家等)

因此,舉例來說,在你的控制器:

def search 
    search = Geocoder.search(params[:search]).first 

    if search.types.includes?('country') 
    @users = User.where(country: search.address) 
    else 
    @users = User.near(search.coordinates, 20) # Will be ordered by distance by default 
    end 
end 

您必須將地址組件存儲在數據庫中。

有一致的數據,最好的方法是運行一個自定義的地理編碼回調:

class User < ActiveRecord::Base 
    geocoded_by :address do |obj, results| 
    if result = results.first 
     obj.street = result.street_address 
     obj.zip = result.postal_code 
     obj.city = result.city 
     obj.country = result.country 
     obj.latitude = result.latitude 
     obj.longitude = result.longitude 
    end 
    end 

    after_validation :geocode, if: :address_changed? 

    def address 
    "#{street}, #{zip} #{city}, #{country}" 
    end 

    def address_changed? 
    street_changed? || city_changed? || zip_changed? || country_changed? 
    end 
end 
0

通過@delba接受的答案是偉大的,只有一個小錯字,那就是,Ruby沒有:includes?數組的謂詞,但:include?。 所以它應該是search.types.include?('country')

+0

其實更多的是評論,但 - - 。 – cramopy

+0

事情是我需要更多的點實際上能夠寫評論,我不能做一個字母的編輯請求,所以我認爲你理解我的場景:) –

相關問題