0

私はジオコーダーとdevise gemを使用しています。そして、ユーザーの場所の近くでクーポンを取得しようとしています

クーポンモデル

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ヘルパーを使ってそのような値を取得しようとしました

クーポンモデル

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

私は壁にぶつかり、これでセルリングしています。誰かが助けてくれますか、これは初心者の質問であることは知っていますが、解決できないので命を救いますか?

4

2 に答える 2

0

@coupons 配列が空であるため、インデックス ページに何も表示されません。

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

開発ログ (Rails サーバーをコンソールから実行している場合は、Rails サーバーが実行されている同じウィンドウ) で、 CouponsController#index アクションに対して生成された SQL クエリを確認する必要があります。

「near」クエリを次のように定義したと仮定します。

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

次のように「rails console」を使用して、この「near」メソッドをデバッグできます。

rails console
> Coupon.near(10, 20)

等..

于 2012-05-11T04:32:38.710 に答える
0

私の間違いは、その緯度の前に経度を持っていたということでした. 論理を奪っていました.

これは機能します。

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

end  
于 2012-05-11T05:50:46.247 に答える