Hi thomas, Sorry to top reply so briefly, but have you seen what david dollar and co have been discussing in the recent :accessible thread?
http://groups.google.com/group/rubyonrails-core/t/4049b4b313fa8be2 Sounds like your plugin here has some changes which could get merged along with his stuff. On Sun, Jul 20, 2008 at 3:09 PM, Thomas Lee <[EMAIL PROTECTED]> wrote: > Hi, > > A few months ago I fixed a Rails bug that was yielding weird, unexpected > results when parsing form parameter names: effectively HWIA semantics > were screwing up UrlEncodedPairParser's parameter parsing when dealing > with nested values. This fixed the defect in question -- and thus solved > my immediate problem -- it raised wider questions about the actual > correctness and behavior of Rails' current parameter parsing code. > > A colleague of mine recently ran into a related problem when dealing > with collections of records in Rails forms, which prompted me to finally > do something about the parameter parsing behavior. Now, while I'm sure > we're not the only ones hitting this wall, I'm aware that proposals to > change to the parameter parsing semantics in Rails is likely to be met > with a little caution, hesitation -- possibly even terror. :) With that > in mind, I've put up a plugin so everybody can give this a go without > having to apply any nasty patches: > > http://www.vector-seven.com/git/rails/plugins/form_collections.git > > Please see the README (attached) for the full details. > > Be gentle, this is an early release that has been cobbled together over > the course of a few nights. We may not have everything right here, but > that's why it's being proposed as a plugin rather than yet another issue > in the tracker. It's hoped this will yield a wider discussion around the > semantics of parameter parsing in core Rails, because -- as it stands -- > things can get a little screwy. > > Looking forward to your feedback, suggestions and/or patches. If this > breaks your code in ways you don't expect, or doesn't quite work how you > would like/need it to, or if it's missing a feature that you'd kill to > have, I'd love to know. > > Please be vocal. :) > > Cheers, > Tom > > > > > FormCollections > =============== > > This plugin effectively rewrites UrlEncodedPairParser and provides the > following features/changes: > > 1. The parameter parsing algorithm is much simpler > > There's all sorts of wacky stuff happening in the current implementation of > UrlEncodedPairParser#parse. This plugin does away with that. A stack is no > longer used during the parse. Parsing an Array vs. parsing a Hash is no longer > all that different. See lib/patch_url_encoded_pair_parser.rb. > > 2. Parsing "a[b][0][c]=6" yields {"a" => {"b" => [{"c" => "6"}]}} > > Previously this would be parsed to: {"a" => {"b" => {"0" => {"c" => "6"}}}} > > In other words, parameters that were formerly treated as hashes with a numeric > index are now actually arrays. > > This is important, because the order in which form fields are present may be > important to the back-end processing code. Here, the array in "b" will > preserve the ordering specified -- generating an Array rather than a Hash for > numeric indices. Most other scenarios should essentially work as before, with > the exception of a few error cases (e.g. parsing "a/[EMAIL PROTECTED]" yields > {"a/b@" => {"c" => {"d[e" => ["f"]}}} instead of {"a/b@" => {"c" => {}}}). > > The main problem here is that if an array is instantiated with a value at > index 1000000, then we'll have 999999 nil elements. I figure this can easily > be worked around with an Array-like structure that consumes only as much > memory > as it needs but otherwise acts as an Array, or a hard limit set via > configuration variable. > > 3. fields_for now treats Arrays properly ... > > Example: > > <% fields_for @post.comments do |comment_form, comment| %> > <%= comment.new_record? ? "" : comment_form.hidden_field(:id) %> > <%= comment_form.hidden_field :post_id %> > <%= comment_form.text_field :content %> > <hr /> > <% end %> > > This will generate the following HTML for an array with two elements (one a > new_record?, the other existing): > > <input id="comments_0_id" name="comments[0][id]" type="hidden" value="1" /> > <input id="comments_0_post_id" name="comments[0][post_id]" type="hidden" > value="1" /> > <input id="comments_0_content" name="comments[0][content]" size="30" > type="text" value="a test comment" /> > <hr /> > <input id="comments_1_id" name="comments[1][post_id]" type="hidden" > value="1" /> > <input id="comments_1_content" name="comments[1][content]" size="30" > type="text" value="" /> > <hr /> > > > Example > ======= > > Just install the plugin, and the new behavior should already be in effect. > > Copyright (c) 2008 Thomas Lee <[EMAIL PROTECTED]>, released under the MIT > license > > -- Cheers Koz --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---