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
tnyplz
2
On Jan 3, 2011, at 2:08 PM, Tony P. wrote:
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.
Alter your database so that the default value for ‘draft’ is false.
Then update your database to set any nil values to false.
-philip
tnyplz
3
On Jan 3, 2011, at 3:08 PM, Tony P. wrote:
Post.where(‘draft is NOT true’)
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.
–
Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice
tnyplz
4
Yeah. I guess ruby is making me lazy. 
I’ll set all my NULLs to false and validate presence.
tnyplz
5
Tony P. wrote in post #972129:
Yeah. I guess ruby is making me lazy. 
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,
Marnen Laibow-Koser
http://www.marnen.org
[email protected]
Sent from my iPhone