2013-09-21 52 views
0

我有一個應用程序,允許用戶根據他們選擇的地址發佈優惠。我想添加保存地址的選項,這個選項是根據IP地址決定的用戶當前位置來保存的。我使用的是紅寶石Geocoder寶石。此代碼將通過,但它不會保存任何地址到數據庫。我不確定這是我的方法的問題還是由於開發環境而無法正常工作。我知道Geocoder的其他功能,例如距離計算不適用於開發。從Rails中的IP地址獲取當前位置的方法(geocoder和gmaps4rails gems)

current_location是要約類的布爾屬性

在報價/ _form查看:

<div class="field"><br> 
     <%= f.label :use_current_location? %> 
     <%= f.check_box :current_location %> 
</div> 

在OffersHelper:

def geocode_by_ip_address(offer) 
    if :current_location 
     offer.address = request.location.address 
    end 
end 

在發售型號:

def geo_offer 
    geocode_by_ip_address(offer) 
end 

對於我的地圖的目的,gmaps4rails使用以下屬性:

def gmaps4rails_address 
    "#{self.address}, #{self.city}, #{self.country}" 
end 

但是該地址沒有保存(使用控制檯已籤)。將不勝感激任何幫助!非常感謝

回答

0

我不確定if:current_location應該是模型中的符號if block。調用對象裏面的CURRENT_LOCATION方法解析爲CURRENT_LOCATION的布爾值(前提是您的控制器正確地保存它),這樣的代碼更改爲:

def geocode_by_ip_address(offer) 
    if current_location 
     offer.address = request.location.address 
    end 
end 

編輯:對不起剛剛意識到這是一個幫手,而不是模型:current_location和current_location在輔助函數中都應該是未定義的,您需要傳遞該邏輯(或者我會將if塊放入模型中,然後調用geocode_by_ip_address並將if塊從那裏移除)

+0

謝謝 - 我使用助手的部分原因是'request'方法屬於ActionView模塊。不幸的是它仍然無法正常工作。 – user2514224

+0

在這種情況下,我最好的建議是用幾個打印語句來檢查代碼是否正在運行request.location.address行。通過這種方式,您可以檢查對象是否按照他們應該的方式工作(例如,無法從中判斷控制器是否正確)。一旦您找到導致問題的線路,請發回。 –