0

我有一个应用程序,它允许用户根据他们选择的地址发布优惠。我想添加根据用户当前位置保存地址的选项,由 IP 地址确定。我正在使用 ruby​​ Geocoder gem。此代码将通过,但它没有将任何地址保存到数据库。我不确定这是否与我的方法有关,或者是否由于开发环境而无法正常工作。我知道 Geocoder 的其他功能(例如距离计算)在开发中不起作用。

current_location是 Offer 类的布尔属性

在 offer/_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

但是地址没有保存(已使用控制台检查)。将不胜感激任何帮助!非常感谢

4

1 回答 1

0

我不确定 :current_location 是否应该是您模型中的符号 if 块。在对象内调用 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 块)

于 2013-09-21T16:41:29.457 回答