Forum: Ruby on Rails Server-side Image Maps in Rails

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Joshua B. (Guest)
on 2007-06-02 18:17
I've been working on an idea to use a server-side image map to allow
users to click anywhere in an area and have a new element appear at the
location they clicked. Everything was going well, until it came time to
connect the routing map. Here are the relevant parts:

In the view, the map is created by --

<%= link_to(image_tag('floor_plan.png', :width => '1000', :ismap =>
'true', :style => 'position: absolute; top: 150px;'), :action =>
'generate_ticket') %>

A click anywhere on the map will generate a url of the form
"/report/generate_ticket?287,374" where 287 is the x-coord and 374 is
the y-coord. So in the routes.rb file we have (at the top of the list)

map.connect ':controller/:action?:x,:y'

Now, if I drop into the console, load up the routing map, and evaluate,
this is what I get --

>> rs = ActionController::Routing::Routes
=> #<ActionController::Routing::RouteSet:0x197da14
@routes_by_controller=nil, ...>>
>> rs.recognize_path '/report/generate_ticket?10,20'
=> {:action=>"generate_ticket", :controller=>"report", :y=>"20",

However, when I click on the image map, the params that are returned to
report#generate_ticket are --

{"287,374"=>nil, "action"=>"generate_ticket", "controller"=>"report"}

Furthermore, if I remove all routes except for the one that should
handle the image map coordinates, then click on the map, I get --

no route found to match "/report/generate_ticket" with {:method=>:get}

and I get the same error if I type the URL in manually. What gives?
Douglas S. (Guest)
on 2007-06-03 00:57
Joshua B. wrote:

> map.connect ':controller/:action?:x,:y'

I don't think having the comma in the route is a terribly good idea.

Why not just use params?

Joshua B. (Guest)
on 2007-06-03 03:55
Douglas S. wrote:
>Joshua B. wrote:
>> map.connect ':controller/:action?:x,:y'
>I don't think having the comma in the route is a terribly good idea.

What makes you say that? As far as I can tell, the
ActionController::Routing::SEPARATORS constant for Rails 1.2.3 is: ["/",
";", ".", ",", "?"]. I can't find any reason why "?" and "," shouldn't
function as well as "/" (though, admittedly it appears that in my
situation they do not).

> Why not just use params?
> maps/index?x=123&y=456

I'd like to, but unfortunately setting the <img> element "ismap" to true
dictates the behavior of the image map and you always end up with
"/something/stuff?###,###". If you know of any way to communicate the
xy-coords back to the server in a different way, I'm all ears!

Oh, by the way, I'm trying this on Mac OS X using the WebKit nightlies
and Camino 1.4, Rails 1.2.3 and Ruby 1.8.6.

Thanks for the feedback!

This topic is locked and can not be replied to.