Merging URL parameters with form_for ones

Hello!

I am using the standard (scaffolded), REST routing. I need to pass external values to my "new" action for a certain model, and let the user complete the other fields in the standard form_for. My initial idea has been to simply amend the URL like this:

.../foos/new?size=4&weight=2

Then in the controller I just do something like:

def new   @temp = Foo.new   @temp.size = params[:size]   ...

  respond_to do |format|       format.html       format.xml { render :xml => @temp }   end

end

Thing is my form_for parameters are not picked up. Only the ones I have setup manually in the URL (size and weight in my example) are taken into account. I believe it is due to the fact that they are serialized and added to the end of the URL, whereas it already contains a "?" and some parameters so they end up being ignored.

Do you know how to do this?

Thanks! PJ

Why don't you include them in the form as hidden fields?

Thanks Hassan.

Sorry I did not give the context: these links are used by another, external app (say app B). A user of app B can trigger the creation of a record in App A, and it needs to pass some default parameters. So I don't believe I can use the standard method of using hidden fields, can I?

So the idea really is: how can you create entry points to an app where these entry points contain default parameters for the creation of a record? It seems to me these parameters HAVE to be passed with the URL, but maybe I am wrong?

Thanks!

OK, so to make sure I understand:

app B has a link to appA/foos/new?size=4&weight=2 -- correct?

and then appA's foos `create` action should include those additional parameters passed to `new`?

If so, there's no reason you couldn't conditionally add hidden inputs to your `new` form to be processed as part of the `create`.

Please let me know if I'm totally off base on my understanding :slight_smile:

Your understanding is absolutely right.

My initial gut was indeed to try hidden inputs. But it does not work:

App B calls appA/foos/new?size=4&weight=2

App A foo/new method is called and the form is pre-populated with size and weight. The problem is, the URL is still appA/foos/new?size=4&weight=2. When the form is submitted, I think what happens is Rails tries to append the form parameters to the existing URL. Since that URL already contains parameters it does something like:

appA/foos/new?size=4&weight=2?size=4&weight=2&price=10 etc and the second set of parameters after the second "?" is ignored by the browser.

At least that's my understanding (I could be wrong).

I guess it would work if I could remove the first set of params. But it looks like I will need to do a redirect_to. I was thinking there might be a cleaner way.

Sorry it is a bit convoluted...

Thanks! PJ

Sorry, that makes no sense -- the submission URL (that will go to the `create` action) shouldn't contain anything from the `new` request.

What is your view code for the start of the form, and what does using `view source` show you for that?

Hassan,

Sorry, that makes no sense -- the submission URL (that will go to the `create` action) shouldn't contain anything from the `new` request.

You are absolutely right... I got totally confused. I looked at my form again and indeed the problem was in it.

Thanks a lot for pointing me in the right direction.

PJ