Trying to figure out if this is a helper or a controller or a partial?

I have an app that I am trying to generate out some GoogleMaps. The GoogleMaps aren't the problem, I am tripping over the proper way to handle what I want to do.

I have a DB for map markers.

Path 1: When the user makes a call to the controller => "mymap", action => "show", I grab the id parameter. From here, if 15 minutes have passed since it was last checked, I make a call to a function check_map_update that makes an RSS call to an outside repository and puts the changes in the map marker DB. Show then goes on to read the map markers and generate a map shown by the view.

Path 2: In my view, I want it to pull up some thumbnails of other maps, so I make a helper called "show_thumbnail", which I put a <% render %> call in that returns the image to display.

MapController def show def check_map_update

MapHelper def map_thumbnail

View: Application.html.erb map/show.html.erb

My Problem: I want to be able to call check_map_update from the function in the helper. Or, is the helper the best place for this? render partial seems to be little help since it doesn't run controller code either. What I really would have liked to have is a controller that calls a couple other actions like show/1, show/53, and includes those as part of the page, but I can't quite figure out the proper place for that and I can't find a tutorial or decent document that says how to do it.

My current thought is that check_map_update should be in the map model. But how would I go about showing multiple maps from the controller?

I am not sure whether this will help or not but is it possible that the underlying cause of the problem is that you are generating the map in the controller? A map is after all a view on some data so arguably should be generated in the view. If in the controller you just setup whatever variables are required to define the map parameters, markers and so on, and move the map generation to the view (with actual code in the model or helpers of course) things might work out easier. In the particular case you mention the controller would just need to define that maps 1 and 53 should be shown and the view would show them.

Colin

Quoting John Goewert <john@goewert.org>:

I have an app that I am trying to generate out some GoogleMaps. The GoogleMaps aren't the problem, I am tripping over the proper way to handle what I want to do.

I have a DB for map markers.

Path 1: When the user makes a call to the controller => "mymap", action => "show", I grab the id parameter. From here, if 15 minutes have passed since it was last checked, I make a call to a function check_map_update that makes an RSS call to an outside repository and puts the changes in the map marker DB. Show then goes on to read the map markers and generate a map shown by the view.

Path 2: In my view, I want it to pull up some thumbnails of other maps, so I make a helper called "show_thumbnail", which I put a <% render %> call in that returns the image to display.

MapController def show def check_map_update

MapHelper def map_thumbnail

View: Application.html.erb map/show.html.erb

My Problem: I want to be able to call check_map_update from the function in the helper. Or, is the helper the best place for this? render partial seems to be little help since it doesn't run controller code either. What I really would have liked to have is a controller that calls a couple other actions like show/1, show/53, and includes those as part of the page, but I can't quite figure out the proper place for that and I can't find a tutorial or decent document that says how to do it.

My current thought is that check_map_update should be in the map model. But how would I go about showing multiple maps from the controller?

I would do something different. Unless you can guarantee the the RSS server is always up and there is never any congestion between the application server and the RSS server (e.g., they are on the same machine or same LAN), I would move the map update to run every 15 minutes. If it is run at the time of the show request, it may take 30 seconds or more to timeout if the server is down. If also may take a while to update the map model from the RSS feed. Is is best for responsiveness if this is down outside the user request.

I have been working on an adaptive RSS reader (AmethystRSS.net) for a while and have found that updates can take longer than the user is willing to wait and timeouts (i.e., no response in 30 seconds or whatever Ruby/Rails sets timeout), 404 errors, 500 errors, etc. are common. Out of the 200+ feeds I read, there are always some that are not fully functional at any given read. An hour later (15 minutes in your case), they are fine.

HTH,   Jeffrey

Quoting Jeffrey L. Taylor <ror@abluz.dyndns.org>:

Quoting John Goewert <john@goewert.org>: > I have an app that I am trying to generate out some GoogleMaps. The > GoogleMaps aren't the problem, I am tripping over the proper way to > handle what I want to do. > > I have a DB for map markers. > > Path 1: > When the user makes a call to the controller => "mymap", action => > "show", I grab the id parameter. > From here, if 15 minutes have passed since it was last checked, I make > a call to a function check_map_update that makes an RSS call to an > outside repository and puts the changes in the map marker DB. Show > then goes on to read the map markers and generate a map shown by the > view. > > Path 2: > In my view, I want it to pull up some thumbnails of other maps, so I > make a helper called "show_thumbnail", which I put a <% render %> call > in that returns the image to display. > > MapController > def show > def check_map_update > > MapHelper > def map_thumbnail > > View: > Application.html.erb > map/show.html.erb > > My Problem: > I want to be able to call check_map_update from the function in the > helper. Or, is the helper the best place for this? render partial > seems to be little help since it doesn't run controller code either. > What I really would have liked to have is a controller that calls a > couple other actions like show/1, show/53, and includes those as part > of the page, but I can't quite figure out the proper place for that > and I can't find a tutorial or decent document that says how to do it. > > My current thought is that check_map_update should be in the map > model. But how would I go about showing multiple maps from the > controller? >

I would do something different. Unless you can guarantee the the RSS server is always up and there is never any congestion between the application server and the RSS server (e.g., they are on the same machine or same LAN), I would move the map update to run every 15 minutes. If it is run at the time of the show request, it may take 30 seconds or more to timeout if the server is down. If also may take a while to update the map model from the RSS feed. Is is best for responsiveness if this is down outside the user request.

I have been working on an adaptive RSS reader (AmethystRSS.net) for a while and have found that updates can take longer than the user is willing to wait and timeouts (i.e., no response in 30 seconds or whatever Ruby/Rails sets timeout), 404 errors, 500 errors, etc. are common. Out of the 200+ feeds I read, there are always some that are not fully functional at any given read. An hour later (15 minutes in your case), they are fine.

I am still wavering between making the RSS feed itself a non-ActiveRecord model versus adding the code to the related model, Map in your case. Maybe with the switch to ActiveModel in Rails3 it will become clearer.

Jeffrey