|
View:
New views
9 Messages
—
Rating Filter:
Alert me
|
|
|
new column in ActiveRecord object, method_missing() called intermittentlyHi, I'm using the geokit plugin to provide a "find-locations-on-radius" feature in my app. When a location is added to the database, the actual address is translated (geocoded) into a longitude & latitude. The longitude and the latitude are stored in the database. When a user performs a "find-locations-on-a-X-miles-radius" from a point of origin (an address), a distance is calculated from the given point of origin to all the stored locations. Geokit overrides the ActiveRecord find method to include a distance column: [:all, {:select=>"*, SQRT(POW(XXX*(XXX- locations.lat),2)+\n POW(XXX*(XXX-locations.lng),2)) \n AS distance", :order=>"distance asc"}] Then from any view you can access the distance on the objects retrieved by find: Location.find(:all,:origin =>[@ip_location.lat, @ip_location.lng]).each { |location| location.distance } The problem that I have is that location.distance returns empty/nil once in a while. From what I understand, when location.distance is called, it invokes method_missing() in activerecord/lib/active_record/ attribute_methods.rb. That is because there is no distance column in the locations table, so it goes to the object's attributes to find the distance. Well, it just so happens that once in a while method_missing () is not invoked when accessing location.distance. I put tracing in method_missing() and when I get distance values method_missing was indeed called, and when I get blank/nil - method_missing was not called. I thought it was because of caching, but I turned off caching in production, and I don't have any explicit caching logic in my views or in my controllers. I asked this question on the geokit group but nobody answered it: http://groups.google.com/group/geokit/browse_thread/thread/ce364a46d802d399 . You can see all debugging and tracing here. Why doesn't method_missing get invoked all the time when location.distance is called? What gets invoked then? Could this be some sort of caching bug? Thanks, Jenna --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyOn Nov 6, 7:34 am, jenna_s <jenna.sim...@...> wrote: > Why doesn't method_missing get invoked all the time when > location.distance is called? What gets invoked then? Could this be > some sort of caching bug? So the times that it returns nil, what does get called ? have you tried stepping through it with the debugger ? Fred > > Thanks, > Jenna --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyOn Nov 6, 2:34 am, jenna_s <jenna.sim...@...> wrote: > Why doesn't method_missing get invoked all the time when > location.distance is called? What gets invoked then? Could this be > some sort of caching bug? > The other issue I've seen with things like this was that some find options (:include, notably) will drop the :select clause, meaning that you won't get an attribute back for distance. Any chance that could be involved? --Matt Jones --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyIt returns nil when you use joins or includes on your finds. Try records.sort_by_distance_from origin. That will add the distance column back 2009/11/6, jenna_s <jenna.simmer@...>: > > Hi, > > I'm using the geokit plugin to provide a "find-locations-on-radius" > feature in my app. When a location is added to the database, the > actual address is translated (geocoded) into a longitude & latitude. > The longitude and the latitude are stored in the database. When a user > performs a "find-locations-on-a-X-miles-radius" from a point of origin > (an address), a distance is calculated from the given point of origin > to all the stored locations. Geokit overrides the ActiveRecord find > method to include a distance column: > > [:all, {:select=>"*, SQRT(POW(XXX*(XXX- > locations.lat),2)+\n POW(XXX*(XXX-locations.lng),2)) > \n AS distance", :order=>"distance asc"}] > > Then from any view you can access the distance on the objects > retrieved by find: > > Location.find(:all,:origin =>[@ip_location.lat, > @ip_location.lng]).each { |location| > location.distance > } > > The problem that I have is that location.distance returns empty/nil > once in a while. From what I understand, when location.distance is > called, it invokes method_missing() in activerecord/lib/active_record/ > attribute_methods.rb. That is because there is no distance column in > the locations table, so it goes to the object's attributes to find the > distance. Well, it just so happens that once in a while method_missing > () is not invoked when accessing location.distance. I put tracing in > method_missing() and when I get distance values method_missing was > indeed called, and when I get blank/nil - method_missing was not > called. > > I thought it was because of caching, but I turned off caching in > production, and I don't have any explicit caching logic in my views or > in my controllers. > > I asked this question on the geokit group but nobody answered it: > http://groups.google.com/group/geokit/browse_thread/thread/ce364a46d802d399 > . You can see all debugging and tracing here. > > Why doesn't method_missing get invoked all the time when > location.distance is called? What gets invoked then? Could this be > some sort of caching bug? > > Thanks, > Jenna > > > > -- Von meinen Mobilgerät aus gesendet --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyI'll try that. It's just that it is hard to make it repeatable for debugging. On Nov 6, 12:25 am, Frederick Cheung <frederick.che...@...> wrote: > On Nov 6, 7:34 am, jenna_s <jenna.sim...@...> wrote: > > > Why doesn't method_missing get invoked all the time when > > location.distance is called? What gets invoked then? Could this be > > some sort of caching bug? > > So the times that it returns nil, what does get called ? have you > tried stepping through it with the debugger ? > > Fred > > > > > Thanks, > > Jenna You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyI did read that in the geokit README, but I have no include in my statement. On Nov 6, 2:13 pm, Matt Jones <al2o...@...> wrote: > On Nov 6, 2:34 am, jenna_s <jenna.sim...@...> wrote: > > > Why doesn't method_missing get invoked all the time when > > location.distance is called? What gets invoked then? Could this be > > some sort of caching bug? > > The other issue I've seen with things like this was that some find > options (:include, notably) will drop the :select clause, meaning that > you won't get an attribute back for distance. Any chance that could be > involved? > > --Matt Jones You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyI'll try it. Thanks. Jenna On Nov 7, 9:14 am, mike <mikez...@...> wrote: > It returns nil when you use joins or includes on your finds. Try > records.sort_by_distance_from origin. That will add the distance > column back > > 2009/11/6, jenna_s <jenna.sim...@...>: > > > > > > > Hi, > > > I'm using thegeokitplugin to provide a "find-locations-on-radius" > > feature in my app. When a location is added to the database, the > > actual address is translated (geocoded) into a longitude & latitude. > > The longitude and the latitude are stored in the database. When a user > > performs a "find-locations-on-a-X-miles-radius" from a point of origin > > (an address), a distance is calculated from the given point of origin > > to all the stored locations.Geokitoverrides the ActiveRecord find > > method to include a distance column: > > > [:all, {:select=>"*, SQRT(POW(XXX*(XXX- > > locations.lat),2)+\n POW(XXX*(XXX-locations.lng),2)) > > \n AS distance", :order=>"distance asc"}] > > > Then from any view you can access the distance on the objects > > retrieved by find: > > > Location.find(:all,:origin =>[@ip_location.lat, > > @ip_location.lng]).each { |location| > > location.distance > > } > > > The problem that I have is that location.distance returns empty/nil > > once in a while. From what I understand, when location.distance is > > called, it invokes method_missing() in activerecord/lib/active_record/ > > attribute_methods.rb. That is because there is no distance column in > > the locations table, so it goes to the object's attributes to find the > > distance. Well, it just so happens that once in a while method_missing > > () is not invoked when accessing location.distance. I put tracing in > > method_missing() and when I get distance values method_missing was > > indeed called, and when I get blank/nil - method_missing was not > > called. > > > I thought it was because of caching, but I turned off caching in > > production, and I don't have any explicit caching logic in my views or > > in my controllers. > > > I asked this question on thegeokitgroup but nobody answered it: > >http://groups.google.com/group/geokit/browse_thread/thread/ce364a46d8... > > . You can see all debugging and tracing here. > > > Why doesn't method_missing get invoked all the time when > > location.distance is called? What gets invoked then? Could this be > > some sort of caching bug? > > > Thanks, > > Jenna > > -- > Von meinen Mobilgerät aus gesendet You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() calljenna_s wrote: > I'll try it. Thanks. > Jenna Please quote when you reply -- otherwise it's impossible to know what you're replying to. Best, -- Marnen Laibow-Koser http://www.marnen.org marnen@... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: new column in ActiveRecord object, method_missing() called intermittentlyHi Mike, I tried your suggestion (putting sort_by_distance_from right after the find()) and it seems to work. I don't understand why, because I really don't have an :include in the find(). I'm just disappointed with myself because I thought I can debug any Rails problem, and this one showed me that I can't. Thanks, J On Nov 7, 9:14 am, mike <mikez...@...> wrote: > It returns nil when you use joins or includes on your finds. Try > records.sort_by_distance_from origin. That will add the distance > column back > > 2009/11/6, jenna_s <jenna.sim...@...>: > > > > > > > Hi, > > > I'm using thegeokitplugin to provide a "find-locations-on-radius" > > feature in my app. When a location is added to the database, the > > actual address is translated (geocoded) into a longitude & latitude. > > The longitude and the latitude are stored in the database. When a user > > performs a "find-locations-on-a-X-miles-radius" from a point of origin > > (an address), a distance is calculated from the given point of origin > > to all the stored locations.Geokitoverrides the ActiveRecord find > > method to include a distance column: > > > [:all, {:select=>"*, SQRT(POW(XXX*(XXX- > > locations.lat),2)+\n POW(XXX*(XXX-locations.lng),2)) > > \n AS distance", :order=>"distance asc"}] > > > Then from any view you can access the distance on the objects > > retrieved by find: > > > Location.find(:all,:origin =>[@ip_location.lat, > > @ip_location.lng]).each { |location| > > location.distance > > } > > > The problem that I have is that location.distance returns empty/nil > > once in a while. From what I understand, when location.distance is > > called, it invokes method_missing() in activerecord/lib/active_record/ > > attribute_methods.rb. That is because there is no distance column in > > the locations table, so it goes to the object's attributes to find the > > distance. Well, it just so happens that once in a while method_missing > > () is not invoked when accessing location.distance. I put tracing in > > method_missing() and when I get distance values method_missing was > > indeed called, and when I get blank/nil - method_missing was not > > called. > > > I thought it was because of caching, but I turned off caching in > > production, and I don't have any explicit caching logic in my views or > > in my controllers. > > > I asked this question on thegeokitgroup but nobody answered it: > >http://groups.google.com/group/geokit/browse_thread/thread/ce364a46d8... > > . You can see all debugging and tracing here. > > > Why doesn't method_missing get invoked all the time when > > location.distance is called? What gets invoked then? Could this be > > some sort of caching bug? > > > Thanks, > >Jenna > > -- > Von meinen Mobilgerät aus gesendet You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
| Free embeddable forum powered by Nabble | Forum Help |