ActiveRecord not getting true value from checkbox

I have a checkbox tag as follows: <%= f.check_box :receive_offers %>

When I view source in the html, I see the value of the checkbox is "1", with the normal hidden field value of "0". However, after posting the form and saving to the database, the Mysql column, which is a TinyInt, is ALWAYS 0.

I've tried it with true/false values instead, and no luck.

Any ideas?

Thanks, Blake Miller

First have a look in development.log where you will see the parameter values posted and check that is what you expect. Then if necessary you can break into your controller code using ruby-debug and can inspect the data to work out what is happening. See the Rails Guide on debugging if you are not familiar with this.

Colin

I have a checkbox tag as follows: <%= f.check_box :receive_offers %>

When I view source in the html, I see the value of the checkbox is "1", with the normal hidden field value of "0". However, after posting the form and saving to the database, the Mysql column, which is a TinyInt, is ALWAYS 0.

Try and find at which point things go wrong, eg does the controller get the right params? Donjon have attr_protected blocking mass assignment of that attribute? Is some other piece of code overwriting the value supplied by the form

Fred

I think you're right...it's probably somewhere in the save code. Problem is, the save method is buried in the Devise (gem) code, so have to figure out what's going on there :/. I've verified before and after the save method, the value is 1; however, the value in the raw sql insert query into the database is 0.

Please remember to quote the previous message so one can follow the thread

I think you're right...it's probably somewhere in the save code.

Who?

Problem is, the save method is buried in the Devise (gem) code, so have to figure out what's going on there :/. I've verified before and after the save method, the value is 1; however, the value in the raw sql insert query into the database is 0.

Are you sure the attribute name exactly matches the column name - check for typo. Check that mass write is not prevented (as Marnen suggested) by creating, setting and saving a record in the console.

Colin

Colin Law wrote in post #963375:

Please remember to quote the previous message so one can follow the thread

I think you're right...it's probably somewhere in the save code.

Who?

Problem is, the save method is buried in the Devise (gem) code, so have to figure out what's going on there :/. I've verified before and after the save method, the value is 1; however, the value in the raw sql insert query into the database is 0.

Are you sure the attribute name exactly matches the column name - check for typo. Check that mass write is not prevented (as Marnen suggested) by creating, setting and saving a record in the console.

Colin

I got it figured out... I had an attr_accessor set for the :receive_offers field, AND the column existed on the table. As such, when the AR object was populated (from the form hash), it was setting the attribute from attr_accessor, rather than the one from the database.

Not a very clear explanation, but removing the unnecessary attr_accessor was the culprit.

Thanks for your help