I''m really hitting a wall here. My program has a search engine, returns a list of results. I am using a two-dimensional hash to pass the form data back to my controller. (i.e. params[:job] => {:description => "xxx", :location => "xxx", company => "xxx"}) I use that Job object to search my database, and then wait for user input. Now when the search is returned if the user wants to sort the list I need to pass that two-dimensional hash back into my controller along with a sort criteria but I cannot seem to do this. I am using link_to_remote and it just kills any hash that is not 1 dimensional. I was told that GETs can only send 1 dimensional hashes so I set link_to_remote to send a POST request: link_to_remote("mylink", :url => {:job => params[:job], :sort => sort_choice}, :post => true} According to WebBrick there is a POST request being sent, but my two-dimensional hash is still be killed. (turned into 1 dimensional string) Is there any way at all to send a two-dimensional hash through a link? Or is this a fundamental limitation of HTTP? -- Posted via http://www.ruby-forum.com/.
Julian ''Julik'' Tarkhanov
2006-May-18 21:07 UTC
[Rails] Two-Dimensional Hashes through links?
On 18-mei-2006, at 22:55, Brian Cardarella wrote:> I''m really hitting a wall here. My program has a search engine, > returns > a list of results. I am using a two-dimensional hash to pass the form > data back to my controller. (i.e. params[:job] => {:description => > "xxx", :location => "xxx", company => "xxx"}) I use that Job object to > search my database, and then wait for user input. > > Now when the search is returned if the user wants to sort the list I > need to pass that two-dimensional hash back into my controller along > with a sort criteria but I cannot seem to do this. I am using > link_to_remote and it just kills any hash that is not 1 dimensional. I > was told that GETs can only send 1 dimensional hashes so I set > link_to_remote to send a POST request: > > link_to_remote("mylink", :url => {:job => params[:job], :sort => > sort_choice}, :post => true} > > According to WebBrick there is a POST request being sent, but my > two-dimensional hash is still be killed. (turned into 1 dimensional > string) Is there any way at all to send a two-dimensional hash > through a > link? Or is this a fundamental limitation of HTTP?No, this is a little deficiency of ActionPack. If you care you can bug the core about the patch that makes it possible. http://dev.rubyonrails.org/ticket/4947 -- Julian ''Julik'' Tarkhanov please send all personal mail to me at julik.nl
Julian ''Julik'' Tarkhanov wrote:> On 18-mei-2006, at 22:55, Brian Cardarella wrote: > >> link_to_remote and it just kills any hash that is not 1 dimensional. I >> link? Or is this a fundamental limitation of HTTP? > No, this is a little deficiency of ActionPack. If you care you can > bug the core about the patch that makes it possible. > > http://dev.rubyonrails.org/ticket/4947 > > -- > Julian ''Julik'' Tarkhanov > please send all personal mail to > me at julik.nlOh wow, thank-you very much. I''ll send the dev-team a note asking for the patch to be added to a future build. -- Posted via http://www.ruby-forum.com/.
I''m finding that if I need to pass around a complex hash the best option is to encode it like so: @my_encoded_hash = Base64.encode64(Marshal.dump(my_complext_hash)).strip this will give you your has encoded as a string value which you can pass between your view and controller more easily. To get back your original hash use something like: @my_decoded_hash = Marshal.load(Base64.decode64(params[:conditions])) Full credit for the above goes to Jamis Buck. Cheers Jonathan ---- http://www.agileevolved.com Brian Cardarella wrote:> I''m really hitting a wall here. My program has a search engine, returns > a list of results. I am using a two-dimensional hash to pass the form > data back to my controller. (i.e. params[:job] => {:description => > "xxx", :location => "xxx", company => "xxx"}) I use that Job object to > search my database, and then wait for user input. > > Now when the search is returned if the user wants to sort the list I > need to pass that two-dimensional hash back into my controller along > with a sort criteria but I cannot seem to do this. I am using > link_to_remote and it just kills any hash that is not 1 dimensional. I > was told that GETs can only send 1 dimensional hashes so I set > link_to_remote to send a POST request: > > link_to_remote("mylink", :url => {:job => params[:job], :sort => > sort_choice}, :post => true} > > According to WebBrick there is a POST request being sent, but my > two-dimensional hash is still be killed. (turned into 1 dimensional > string) Is there any way at all to send a two-dimensional hash through a > link? Or is this a fundamental limitation of HTTP? >