2012-09-06 16 views
7

के साथ संयुक्त शामिल होने के 2 से संबंधित रेल मॉडलभीतरी रेल जियोकोडिंग मणि

class Location < ActiveRecord::Base 
    has_many :rates 
    geocoded_by .... 
end 

class Rate < ActiveRecord::Base 
belongs_to :location 
end 

मैं जियोकोडर मणि का उपयोग कर रहा है - http://www.rubygeocoder.com

मुझे लगता है कि एक के भीतर कर रहे एक विशेष pair विशेषता के साथ सभी दरों लगाना चाहते हैं उपयोगकर्ता के लिए कुछ दूरी।

एक आंतरिक

SELECT * FROM rates INNER JOIN locations ON rates.location_id=locations.id; 

फिर दरों पर शामिल होने के एसक्यूएल में, मैं क्या करना होगा, एक जहां जोड़ी विशेषता पर फिल्टर करने के लिए शर्त डालें, और उसके बाद (पास जिसके परिणामस्वरूप मेज पर जियोकोडर के पास विधि का उपयोग विधि क्वेरी में एक शर्त कहकर काम करती है जो स्थान पर अक्षांश और देशांतर गुणों का उपयोग करके दूरी की गणना करती है) केवल सही दूरी के भीतर पंक्तियों का चयन करने के लिए

मैं रेल में यह कैसे कर सकता हूं? मैंने कोशिश की

rates = Rate.joins(:locations) 

मैं

ActiveRecord::ConfigurationError: Association named 'locations' was not found; perhaps you misspelled it? 

मिल मैं इस

rates = Rate.joins(:locations).near(my_latitude, my_longitude, distance).where(:rates => {:pair => 'xxxx'}) 

क्या करना चाहते हैं, लेकिन मैं

undefined method `near' for #<ActiveRecord::Relation:0xa075ff8> 
+0

चूंकि यह एक belongs_to है, मुझे लगता है कि ': locations' विलक्षण की जरूरत है। सुनिश्चित नहीं है कि यह काम करेगा, लेकिन आपको बस अपनी विधि कॉल को फिर से ऑर्डर करने की आवश्यकता हो सकती है। इस बात पर निर्भर करता है कि मणि एआरएल के साथ कैसे काम करता है। 'Rate.near (my_latitude, my_longitude, distance)। Join (: location) .where (: rate => {: pair => 'xxxx'})' – agmcleod

उत्तर

2

मिल मैं जानता हूँ कि यह काफी पुराना पुराना है, लेकिन अभी भी उत्तर नहीं दिया, कहीं नहीं :)

मैं एक ही समस्या में भाग गया, फिर थोड़ी सी जानकारी deep down in the geocoder documentation पर ठोकर खाई, जहां उसने कहा कि बाहरी काम करने के लिए (जिसमें रेल में शामिल हैं) शामिल हैं, आपको संयोजन में शामिल होने का उपयोग करना चाहिए: चयन करें और यह मेरे लिए किया (मुझे किसी निश्चित स्थान के भीतर उपयोगकर्ताओं से सभी उत्पादों को खोजने की आवश्यकता है)।

तो मेरे सिर के ऊपर से बस, यह आपके मामले में काम कर सकते हैं:

rates = Location.near(my_latitude, my_longitude, distance, :select => "rates.*").joins(:locations).where(:rates => {:pair => 'xxxx'}) 

मुझे आशा है कि इस मदद करता है।

+0

यह समाधान बहुत सारी समस्याएं पैदा करता है: आप स्कोप, आंशिक उपयोग नहीं कर सकते काम न करें क्योंकि रेल दरें, इत्यादि के बजाय स्थान प्रस्तुत करने की कोशिश करता है। – collimarco

7
near = Location.near(location, radius) 
Rate.includes(:location).references(:location).merge(near) 

यह अन्य स्थान के साथ chainable है या दर scopes

संबंधित मुद्दे