0

例如,我有以下模型:

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 的一些标准。

我该怎么办?

4

1 回答 1

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)

话虽如此,最后一部分将在上面提供的代码中使用 ruby​​ 缩小范围。如果你想缩小关联模型的标准,因为你正在谈论只使用查询,你可能不得不使用ActiveRecord 的find_by_sql方法并手动编写查询。

于 2012-01-10T04:26:35.030 回答