Treating NULL in DB as false.

I feel like I'm missing something obvious here..

I have a Post object and it has a draft attribute. It may be nil, true or false. I want nil to be treated as false

Post.where(:draft => false) does not pick up the posts where draft is unset(nil)

This leaves me to query with

Post.where('draft is NOT true')

Is there a cleaner way to do this? I prefer using hash conditions. I could set the draft boolean before_save but it seems wasteful.

Thanks in advance

Tony

Alter your database so that the default value for 'draft' is false. Then update your database to set any nil values to false.

-philip

That shouldn't work either. NULL is neither true nor false. "draft = false or draft is null" is the SQL for what you're asking for.

But if NULL really has no meaning that is distinct from false, then it's an incorrect design to allow it in the first place.

Yeah. I guess ruby is making me lazy. :wink:

I'll set all my NULLs to false and validate presence.

Tony Primerano wrote in post #972129:

Yeah. I guess ruby is making me lazy. :wink:

I'll set all my NULLs to false and validate presence.

Remember to make the field NOT NULL in the DB. Rails validations are insufficient.

Best,