2

私のサイトでは、かなり複雑な (またはそう思われる) ジオキット ベースの位置検索を行っています。つまり、「ビジネス」という別のモデルに属する「キャンペーン」というモデルがあります。サイトで検索するとき、ユーザーは「キャンペーン」を検索していますが、そのキャンペーンのビジネス名を検索すると、適切なモデルがすべて結果に表示されるようにしたいと考えています。このために、私は検索に参加しています。

さらに、gekit プラグインと gem をインストールして、ユーザーが元の場所 (提供されている場所) から設定された距離内でのみこれらの検索の結果を取得できるようにします。ただし、この位置情報機能をサイトに追加すると、奇妙な結果が得られます。

次の検索を使用すると (簡潔にするために簡略化されていますが、コンソールでテストされています):

Campaign.find(:all, 
              :joins => :business, 
              :conditions => ['businesses.name LIKE ?', "%Koo Koo Roo%"]
             )

次の適切な結果が得られます。

[#<Campaign id: 12, user_id: 4, business_id: 8, created_at: "2011-01-14 16:22:31", updated_at: "2011-01-14 16:25:20", lat: #<BigDecimal:2ad295a9eda8,'0.34154891E2',18(18)>, lng: #<BigDecimal:2ad295a9ed08,'-0.118358834E3',18(18)>>]

しかし、この検索に geokit ベースのロケーション検索パラメーターを追加しようとすると、次のようになります。

Campaign.find(:all, 
              :joins => :business, 
              :origin => "90066", 
              :within => 25, 
              :conditions => ['businesses.name LIKE ?', "%Koo Koo Roo%"]
             )

次の結果が得られます。

[#<Campaign id: 8, user_id: 4, business_id: 8, created_at: "2011-01-14 16:25:20", updated_at: "2011-01-14 16:25:20", lat: #<BigDecimal:2ad29933e618,'0.34154891E2',18(18)>, lng: #<BigDecimal:2ad29933e578,'-0.118358834E3',18(18)>>]

これはほとんど同じです。唯一の違いは、2 番目の結果では、business_id をキャンペーン ID として渡しているように見えることです。これを 2 回確認しましたが、どちらも同じで、キャンペーン ID が business_id に置き換えられます。

私が言及する必要があるのは、これは何があっても真実であるということです:私が入る距離内。

ここで何が間違っていますか?何か不足していますか?私はそれを理解できないようです。私にはすべてが健全に見えますが、どうやらそうではありません! geokit によってこのように結果が台無しになる方法がわかりません。

私のモデルでは、私は単に持っています:

Business.rb
has_many :campaigns

Campaign.rb
belongs_to :business

どんな助けでも大歓迎です。ある種の関連性が欠けていますか?geokit キャッシングを有効にしていません。

ありがとう!

4

1 に答える 1

0

「id」フィールドが危険な結合コードによって上書きされているためです。参加すると、2 つの「id」フィールド (ビジネス用とキャンペーン用) があります。どちらが「the」IDであるかに関する明示的な指示がなければ、DBは推測します。

残念ながら、Rails のバージョンの 1 つにはバグがあり、メインのアクティブ レコード ID (この場合は Campaign.id) が重要な ID であると明示的に述べられていませんでした...そしてデータベースは間違った ID を推測し、上書きしていました。 Business.id の id。

簡単な (しかし、よりハックな) 修正方法を既に発見しました... もう 1 つはレールのアップグレードです。

于 2011-03-22T16:06:38.863 に答える