I have a 'protected_profile' boolean attribute in my user model, and I
want to use it in a controller action, like so;
if @user.protected_profile = true
some.task
else
some_other.task
end
But even if the protected_profile boolean returns false in the browser
(<%= @user.protected_profile %>), the above action doesn't seem to
work.
I barely remember reading something about Ruby assigning true values
in
most instances - is that what is causing my problems?
No. Your problem is that = is the assignment operator, not the
comparison operator (that's ==)
You probably just want:
if @user.protected_profile
some.task
else
some_other.task
end
But even if the protected_profile boolean returns false in the
browser
(<%= @user.protected_profile %>), the above action doesn't seem to
work.
I barely remember reading something about Ruby assigning true values
in
most instances - is that what is causing my problems?
No. Your problem is that = is the assignment operator, not the
comparison operator (that's ==)
You probably just want:
if @user.protected_profile
some.task
else
some_other.task
end
Fred
Thanks Fred. I tried your suggestion, but it doesn't work. A user with
protected_profile 'false' will still do some.task, rather than
some_other.task. The same goes when using the comparison operator,
@user.protected_profile == true.
Are you setting protecting profile to the string 'false'? The two are
completely different (and you may not expect it, but the string
'false' is in fact true.
Thanks Fred. I tried your suggestion, but it doesn't work. A user with
protected_profile 'false' will still do some.task, rather than
some_other.task. The same goes when using the comparison operator,
@user.protected_profile == true.
If this is an ActiveRecord model with a *database* type of boolean, you
shouldn't assume anything about the actual value of the attribute.
Different database adapters will use different values. As Fred says,
because the value *displays* as 'false' doesn't mean it is the "false"
boolean value.
The best way to test a boolean attribute is with a query predicate:
if @user.protected_profile?
This allows the adapter to translate the database value into a boolean
for you...