FormHelper and write-only fields

Hi!

Until recently I used a User model with a write-only password field on
it. The idea is to pick that cleartext password up, perform some
salting and hashing on it and then write that to the database. So my
model used a method like this:

def password=(cleartext_password)
  @password = cleartext_password
end

Worked fine in combination with form_for and
f.password_field :password. But RC2 changed that and now complains
about missing method password_before_type_cast. The only workaround
I've found is to implement that method. (See
https://rails.lighthouseapp.com/projects/8994/tickets/5471-formhelper-problem-with-write-only-fields
for a diff with a failing test in actionpack.)

Can anybody shed some light on this?

Thank you,
Oliver

FormHelper needs a read method, too. You can return a blank string if
you like but you need to respond_to the field name in question.

You're most likely doing something that's not playing nicely with this
commit's change to value_before_type_cast:

http://github.com/rails/rails/commit/fb0bd8c1092db51888ec4bb72af6c595e13c31fa

I'm about to push a change related with this but definitely is not
going to solve your problem. You need a database field or a field
reader. Also your code doesn't work even before my commit. You can
check it out ...

Let's review it ...

object.respond_to?(method_name + "_before_type_cast") ?
object.send(method_name + "_before_type_cast") :
object.send(method_name)

Your object doesn't respond_to password_before_type_cast so this code
ends trying to execute object.send('password') and you don't have a
reader neither.

Oliver, perhaps what you want to do is f.password_field :password, :value => ''
and instead of writing the password= method you can do attr_writer :password :wink:

I hope my message can clarify the situation.

Cheers,
Santiago.