2012-01-10 16 views
0

を通して見つけ、私は次のモデル持っRailsの例として協会、場所

class Store < ActiveRecord::Base 
    attr_accessible :attr2, :attr3 
    belongs_to :location 
end 

を私はすべての店舗の検索を行うことができるようにしたいと思います:

  1. (ロケーションモデルにジオコーダを使用して)近くにあり
  2. は、いくつかcriteを満たしています場所モデルのattr1のria
  3. は、ストアモデルのattr2、attr3に関するいくつかの基準を満たしています。

どうすればよいですか?

+0

ロケーションに店舗との間に「has_many」関係があるのはなぜですか?それは別の方法ではありませんか?のように、リンゴストア 'has_many'の場所。場所がモールか何かでない限り、そこにはただ一つの店しかないだろうと推測しています。 – Batkins

+0

申し訳ありませんが、この例は少し誤解を招いていました。私の説明は下のあなたの答えを参照してください。 –

答えて

1

私はまだあなたの関係の設定について戸惑いよ...しかし、私は上記のようなセットアップを持っていたと言う:

class Store < ActiveRecord::Base 
    attr_accessible :attr2, :attr3 
    has_many :locations 
end 

class Location < ActiveRecord::Base 
    attr_accessible :name, :full_address, :latitude, :longitude, :attr1 

    geocoded_by :full_address 
    belongs_to :store 
    after_validation :geocode, :if => :full_address_changed? 
end 

あなたはこのような何かを行うことができ...

locations = Location.near(current_location.to_s, 20).where(:attr1 => 'a value') 
stores_that_match = locations.find_all {|loc| loc.try(:store).try(:attr2) == 'value2' && loc.try(:store).try(:attr3) == 'value3' }.map(&:store) 

言われているように、最後の部分は上で提供されたコードの中でルビを使用して絞り込まれます。クエリだけを使用して話しているときに関連するモデルの条件を絞りたい場合、おそらくActiveRecord's find_by_sql methodを使用し、手動でクエリを書き出します。

+0

申し訳ありませんが、私の例はちょっと混乱していると思います。ロケーションは、ゴルフカントリークラブのようなものを表すことを意図したもので、複数のコース(私の例では店舗)がある場合とない場合があります。 この例では、カントリークラブのすべてのコースは、いくつかの同様のプロパティ(場所、クラブ評価など)を共有していますが、独自の属性はいくつかあります。 –

+0

私はあなたが提案したような何かをやり遂げるかもしれません、そして、場所に複数の店があるかもしれませんが、各店に緯度/経度を保存することを複製します。 –