1

ジオコーダーの宝石と、ジオコーダーの便利な機能を容易にするためにレールでモデルを設計する方法について、一種の一般的な質問があります。

Article モデルと Place モデルがあります。記事は常に場所について書かれるため、記事には常に place_id があります。Place モデルには、場所の住所と、ジオコーダーが必要とする :latitude 列と :longitude 列が含まれています。

ジオコーダーには、特定の場所の近くの場所を見つけることができる「nearbys」メソッドがあります。たとえば、@place.nearbys は、@place の近くにある場所のコレクションを生成します。それは素晴らしいことですが、最近書かれた記事や近くの場所について書かれた記事をすべて検索できるようにしたいと考えています。

それを行う方法は2つしか考えられません。緯度と経度の列を Article モデルに追加すると、@articles.nearby を検索できるようになります。このソリューションの問題は、場所について書かれたすべての記事ではなく、場所が緯度と経度を保持する責任があるため、モデル設計が適切ではないように思われることです。

これを簡単に達成する方法についていくつかの提案をしていただければ、それは素晴らしいことです。

4

1 に答える 1

4

あなたのために働くかもしれないいくつかのオプションは?

@places = Place.near(@search, @distance, :order => :distance)
@articles = Article.where("place_id IN (?)", @places).where("published_on > ?", 60.days.ago).limit(3 * @places.length)

場所から記事を遅延読み込みしますが、結果を制限します

@place = Place.find(params[:id])
@place.nearbys(@distance).each do |place|
    place.articles.order("created_at desc").limit(3).each do |article|
        # ...
    end
end
于 2012-03-08T04:27:51.897 に答える