Forum: Ruby on Rails operator overload on views

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Zeke T. (Guest)
on 2006-05-09 03:42
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
      self.userlevel > item

(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?
Dan Venkitachalam (Guest)
on 2006-05-09 04:51
(Received via mailing list)
Try changing your comparison:

if item.class == "User"


if item.class == User

On a side note, I'm not a fan of overloading these operators.

Zeke T. (Guest)
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.
Dan Venkitachalam (Guest)
on 2006-05-09 06:03
(Received via mailing list)
I usually don't like this kind of overloading because it's not obvious
the overload means, which makes it less maintainable.  I don't naturally
associate user levels with < and > operators - I'd just as likely
user id comparisons to them.  In this case, I'd prefer a named
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.


This topic is locked and can not be replied to.