Pass content of Array to helper

Hi,

Ive been trying to to do the following and cant figure out how…

On my page some output is generated within a helper - an array. The
content of the array is listed on the page, but I want to be able to
click on a button at the bottom of the page to take the array and
transfer it’s content to another method and view, instead of having to
re-generate it from scratch. Now, both link_to and button_to do not seem
to accept an array as option, just integers and strings (like “link_to
‘next_page’, :action => ‘some_method’, :array => @some_array”).
And else, how to I process the array in the new method. SO far I only
now the params[:array] option - is there perhaps anything else? Like
@array = :array…

Any advice on how to do this in practice would be greatly appreciated…
maybe I am just being too tired now, but I really cant figure it out :_.

Cheers,

Marc

Its ugly and the array could potentially blow out the url, but you could
always translate the array into a big-a$$ string parameter and pass it
back that way.

Gives me the willies to think about it though…

Marc,

You could do Ar’s idea. Since the array is generated by a helper, it’s
on the view and you need to plug it in somehow so that the view then
needs to pass it back in a new request to the controller. You could
also try passing it as a JSON object.

Another thought: can you generate the array in the controller before
you call the view? If so, then you could save the array as a
serialized value on the session. Or, serialize it to disk.

I guess it comes down to when the array is created. If it’s only in
the view… like some javascript that creates it or something… then
you probably will need to store it in some variable so it can be
passed to the controller… which means Ar’s idea (or JSON or some
similar format).

Tell us a little more what you are trying to do and maybe there’s a
better way overall.

Usually, though, if you need to move data back and forth between
requests, you use the session if the data isn’t too big, or the
database, or the filesystem (i.e. dump it to XML then read it back in,
or something like that).

Just some thoughts…

-Danimal

Look at Marshal#dump / Marshal#load

$ irb

a = %w{ one two three}
=> [“one”, “two”, “three”]

dumped = Marshal.dump(a)
=> “\004\b[\b”\bone"\btwo"\nthree"

Marshal.load(dumped)
=> [“one”, “two”, “three”]

Then need to “url-escape”:

require ‘cgi’
=> true

dumped_urlencoded = CGI.escape(dumped)
=> “%04%08%5B%08%22%08one%22%08two%22%0Athree”

CGI.unescape(dumped_urlencoded)
=> “\004\b[\b”\bone"\btwo"\nthree"

Marshal.load(CGI.unescape(dumped_urlencoded))
=> [“one”, “two”, “three”]

Stephan