sql - Complex Search with Multiple Models and Geokit using Rails -
i attempting make search complicated (of course, make easier users)
i've got app 3 models: campaigns, businesses , locations
like so:
\\ campaign.rb   belongs_to :business   has_many :locations, :through => :business   acts_as_mappable  \\ business.rb   has_many :campaigns   has_many :locations  \\ location.rb   belongs_to :business   has_many :campaigns, :through => :business   acts_as_mappable the way set up, there businesses have multiple locations. don't, geokit info coded campaign database entry. have multiple locations geokit info coded location database entry.
i trying search campaigns return results within distance. simple enough when dealing businesses have single address.
  campaign.find(:all,          :conditions => [blahblahblah],        :origin => address,        :within => distance        ) however, want include campaigns belong businesses have multiple locations. want search return result campaign, if business has multiple locations, , if of locations fall within bounds. thinking like:
  campaign.find(:all,         :include => [:business, :locations]        :conditions => [blahblahblah],        :origin => address,        :within => distance        ) but doesn't return results campaigns belong businesses have multiple locations. i'm noob when comes sql i'm not sure how have rails search in 1 model (campaign), , search across model (the business model) grab results location model. fact geokit involved makes more complex.
i tried: acts_as_mappable :through => :locations in campaign.rb threw sql error
i messed around polymorphic model "addressable" found pretty have start ground on controllers of other models.
i've thought named_scopes believe geokit not support them.
any suggestions?
if think model overly complicated sign needs redesign.
is possible have campaign without business? if not, doesnt make sense make campaign act_as_mappable (im assuming campaign db has lat , lng columns) if business has mappable locations.
if campaign associated business has multiple locations, whats considered location of campaign? store in campaigns.lat , lng attributes?
if youre sticking datamodel, recommend break search multiple commands:
def find_campaigns_near(origin,distance)     locations = location.find(:all,               :origin => address,             :within => distance     );     # use hash uniqueness based on id     campaigns = hash.new     locations.each |location|         location.campaigns.each |campaign|             campaigns[campaign.id] = campaign if campaigns[campaign.id].blank?         end     end     campaigns end 
Comments
Post a Comment