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? -- Posted via http://www.ruby-forum.com/.
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 5/8/06, Zeke Tamayo <spam@malweth.net> wrote:> > 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? > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-- Dan Venkitachalam expandingbrain.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060509/80c12edf/attachment.html
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. -- Posted via http://www.ruby-forum.com/.
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. On 5/8/06, Zeke Tamayo <spam@malweth.net> wrote:> > 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. > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-- Dan Venkitachalam expandingbrain.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060509/38a5fb05/attachment.html