设计宝石和Geocoder宝石

时间:2012-05-10 10:27:32

标签: ruby-on-rails-3 devise

我正在使用地理编码器和设计宝石。而我正试图在用户所在地附近获得优惠券

优惠券型号

def index
  if params[:search].present?
    @coupons = Coupon.near([user_long, user_lat], 50, :order => :distance)
  else
     @coupons = Coupon.all
  end
end 

应用程序助手

我已经定义了user_long和user_lat

  def user_long
           current_user.longitude
   end


   def user_lat
           current_user.latitude
   end

设计宝石

我试图使用devise gem helper来获取像这样的值

优惠券型号

def index
  if params[:search].present?
    @coupons = Coupon.near([current_user.longitude, current_user.latitude], 50, :order => :distance)
  else
     @coupons = Coupon.all
  end
end 

我正在撞墙,并用这种方式进行调整。有人可以帮忙,我知道这是新手问题,但我无法解决它,所以挽救我的生命?

2 个答案:

答案 0 :(得分:0)

您在索引页面上没有看到任何内容,因为您的@coupons数组为空:

@coupons = Coupon.near([current_user.longitude, current_user.latitude], 50, :order => :distance)

在开发日志中(在运行rails服务器的同一窗口中,如果从控制台运行rails服务器),您应该查看为CouponsController#index action生成的SQL查询。

假设你定义了这样的“近”查询:

class Coupon
   scope :near, lambda { |longitude, latitude| some logic...
end

您可以使用“rails console”调试此“near”方法,如下所示:

rails console
> Coupon.near(10, 20)

等。

答案 1 :(得分:0)

我的错误在于我在那个纬度之前拥有经度,它正在消除逻辑

这很有效。

def index
     @coupons = Coupon.near([current_user.latitude, current_user.longitude], 50, :order => :distance)

end