I’m trying to extend form_for to add a hidden field to certain forms
but not others. I realize that I need to push it on to the end of the
&proc, but have yet to find an elegant way of doing it and was
wondering if anyone had any insights?
This is as close as I’ve come to doing it without having to copy and
paste the whole form_for method in to the else:
module ActionView
module Helpers
module FormHelper
def form_for_with_session_included(record_or_name_or_array,
*args, &proc)
if !bad_request?
form_for_without_session_included(record_or_name_or_array,
*args, &proc)
else
proc_with_session = Proc.new{ proc.call.concat
(hidden_field_tag(:_session_id, session.session_id, :id => nil)) }
form_for_without_session_included(record_or_name_or_array,
*args, &proc_with_session)
end
end
alias_method_chain :form_for, :session_included
end
end
end
The problem seems to comes in in that the proc holds all the
FormHelper fields. These expect to wake up inside the form_for object,
so they do a lot of NoMethodError complaining when they get woken up
like this.
The only option that I’ve found that works is the aforementioned
simian solution of copying the whole form_for method in to the else
and adding an additional concat with my hidden_field. This just
smells too strongly of future maintenance headache, and so I’d like a
much neater solution.
I’m pretty new to procs beyond very simple usage, so any help or
suggestions would be greatly appreciated.
Thanks,
Todd
(Yes, that’s cookie-based sessions being overridden. Mobile phone
browsers are the spawn of satan).