I was working with rendering collections with partials last night. When you render a collection w/ a partial a variable is created that's the same as the partial, ie: "_user.rhtml" creates the variable "user".
The form helpers assume the object you want them to reference is an instance variable, ie: they require an '@'. This makes them completely useless in a partial unless I explicitly include something like "<% @user = user %>" at the top of each partial.
I'm sure the assumption that the form helper would reference an instance variable is to make it so I don't have to type a bunch of '@'s. This follows the DRY principle to an extent, but forces a much much greater violation of DRY. That violation is the inclusion of an instance variable assignment in /every/ single partial that uses a form helper.
Obviously backwards compatibility is important, so the form helpers would have to see if an instance variable exists, and if it does not then it needs to try a local variable. I would also be fine w/ using "text_field '@user', 'name'" for every call to a form helper. It's more explicit and doesn't assume what kind of variable I want.