In my User auth scheme I have a userlevel. I’ve overloaded the User
class operators like this:
def >(item)
if item.class == “User”
self.userlevel > item.userlevel
else
self.userlevel > item
end
end
(other operators are overloaded in essentially the same way). As I
understand it, using the operator “>” inside the overloaded operator is
OK because User.userlevel.class == Fixnum.
in my “edit.rhtml” view, I have the following code:
<% if @local_user > @user &&
@local_user >= 7000 ||
@local_user == @user %>
…
<% end %>
this produces an exception:
“comparison of Fixnum with User failed” - are my overloaded operators
not being used, or am I doing something wrong?
Try changing your comparison:
if item.class == “User”
to
if item.class == User
On a side note, I’m not a fan of overloading these operators.
Dan.
Thanks! I should have realized the class method returned a class
Why don’t you believe in overloading these operators? In an activerecord
class, I find it fairly unuseful to compare memory space pointers.
Overloading the operators to compare the most useful information
(userlevel in this case) seems to make sense.
I usually don’t like this kind of overloading because it’s not obvious
what
the overload means, which makes it less maintainable. I don’t naturally
associate user levels with < and > operators - I’d just as likely
associate
user id comparisons to them. In this case, I’d prefer a named
comparison
function like is_higher_userlevel().
But, it’s all down to the coding style of your organisation. Good
documentation can make this is a non-issue.
Cheers,
Dan.