&amp in url: this is driving me nuts!

Remco Hh wrote:

hi i have a weird problem:

this is my view: <tr> <%= start_form_tag :action => 'new_beschikbaarheid', :behandelaar_id =>@behandelaar, :year => @year%> <td>behandelaar</td><td><%= collection_select("behandelaar",'id',Behandelaar.find(:all),:id,:naam) %> <%= submit_tag 'Opzoeken' %> </td> <%= end_form_tag %>

when i hit the submit button i get this url:

http://localhost:3000/admin/new_beschikbaarheid?behandelaar_id=1&amp;year=2006

where does the amp sign come from and better: how can i get rid of it: i sure hope someone can help me, i don't know what to do anymore....

This is a known problem with some of the tag helpers that handle URLs -- they double-escape the URL so that & becomes &amp;amp; instead of just &amp; in the HTML.

I've written a patch to fix this, but it's not been accepted yet:

http://dev.rubyonrails.org/ticket/5928

In the meantime you could work around it with some ugly code like this:

<form action="<%= url_for(:action => 'new_beschikbaarheid', :behandelaar_id

=>@behandelaar, :year => @year) %>">

Alternatively you could write yourself a custom route so that the generated URL doesn't contain any ampersands:

map.connect ':controller/new_beschikbaarheid/:behandellar_id/:year'

or something like that.

Chris

Chris Mear wrote:

In the meantime you could work around it with some ugly code like this:

<form action="<%= url_for(:action => 'new_beschikbaarheid', :behandelaar_id > =>@behandelaar, :year => @year) %>">

Google Groups ate my code! But you get the idea -- just manually write the form tag, and call url_for to write the action attribute.

Chris

Remco Hh wrote: > hi i have a weird problem:

<...>

> when i hit the submit button i get this url: > > http://localhost:3000/admin/new_beschikbaarheid?behandelaar_id=1&amp;year=2006

Chris Mear: <...>

In the meantime you could work around it with some ugly code like this:

<form action="<%= url_for(:action => 'new_beschikbaarheid', :behandelaar_id > =>@behandelaar, :year => @year) %>">

Alternatively you could write yourself a custom route so that the generated URL doesn't contain any ampersands:

map.connect ':controller/new_beschikbaarheid/:behandellar_id/:year'

or something like that.

This bug should be fixed, but I'd suggest not to mix GET and POST (default) methods anyway. You can use hidden fields for additional parameters:

<tr> <%= start_form_tag :action => 'new_beschikbaarheid'%> <%= hidden_field_tag :behandelaar_id, @behandelaar %> <%= hidden_field_tag :year, @year %> <td>behandelaar</td><td><%= collection_select("behandelaar",'id',Behandelaar.find(:all),:id,:naam) %> <%= submit_tag 'Opzoeken' %> </td> <%= end_form_tag %>

Regards, Rimantas

Rimantas Liubertas wrote:

I'd suggest not to mix GET and POST (default) methods anyway. You can use hidden fields for additional parameters:

You're not mixing GET and POST; you're just POSTing to a URL that happens to have some querystring parameters. And, with Rails' routes, the difference between

/user/edit/1

and

user/edit?id=1

is pretty slender. They both end up as params[:id] = 1. So every time you submit a form to /user/edit/1 (which is standard practice in Rails), you're effectively POSTing to a URL with querystring parameters; it's just that routing hides the ugliness of ?s, =s and &s.

Chris

Rimantas Liubertas wrote:

> I'd suggest not to mix GET and POST > (default) methods anyway. You can use hidden fields for additional > parameters:

You're not mixing GET and POST; you're just POSTing to a URL that happens to have some querystring parameters. And, with Rails' routes, the difference between

My bad, I should have said "I'd suggest to avoid passing parameters in url with POST" :slight_smile:

Regards, Rimantas