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?
on 2006-05-09 03:42
on 2006-05-09 04:51
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.
on 2006-05-09 05:22
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.
on 2006-05-09 06:03
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.