例如,我有以下模型:
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
我希望能够搜索所有商店:
我应该怎么做?
答案 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)
话虽这么说,最后一部分将在上面提供的代码中使用ruby缩小。如果你想缩小相关模型的标准,因为你只是在谈论使用查询,你可能会去必须使用ActiveRecord's find_by_sql
method并手动编写查询。