Rails Find Through Association, Местоположение - PullRequest
0 голосов
/ 10 января 2012

В качестве примера у меня есть следующие модели:

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

  geocoded_by :full_address
  has_many :stores
  after_validation :geocode, :if => :full_address_changed?
end

и

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

Я бы хотел выполнить поиск по всем магазинам, которые:

  1. находятся поблизости (с использованием геокодера в модели местоположения)
  2. соответствует некоторым критериям для attr1 в модели местоположения
  3. соответствует некоторым критериям для attr2, attr3 в модели Store.

Как мне поступить об этом?

1 Ответ

1 голос
/ 10 января 2012

Я все еще озадачен настройкой ваших отношений ... но, скажем, у вас была такая настройка, как я упоминал выше:

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)

При этом последняя часть будет сужена с помощью ruby ​​в приведенном выше коде. Если вы хотите сузить критерии для связанной модели, поскольку вы говорите об использовании только запроса, вы, вероятно, собираетесьиспользовать метод find_by_sql ActiveRecord и написать запрос от руки.

...