I've run into a weird case in my production app, which I haven't yet figured out how to reproduce locally, but I have been able to intercept and dig pretty deep on prod.
Basically, there are situations where there are two different model instances representing the same row in the database, but comparing them with `==` returns false. Example: # Database Table: users # id | email | first_name | last_name # --------------------------------------------- # 1 | [email protected] | Joe | Example class User < Sequel::Model one_to_many :books end # Problematic code: during request we load current_user from session, and load a book based on a URL param. book.user_id #=> 1 current_user.id #=> current_user.id == book.user.id #=> true current_user.to_hash == book.user.to_hash #=> true current_user == book.user #=> false This is causing me a bit of angst, as I can't figure out what would cause the two instances to not understand that they represent the same user. I can work around it by only comparing IDs, though there are other places where it causes problems because I have a set of users and calling `user_set.include?(user) ` will also fail when it should not, due to `==` returning false. I looked in the source code and I see that `==` aliases `eql?` which looks like this: def eql?(obj) (obj.class == model) && (obj.values == @values) end I'm pretty certain the issue must be there's *something* different inside the two object values, but given the hashes they output are the same I don't know what it is or how to tell. Jeremy, two questions for you (or anyone else who has hit this): 1) Are there any known "edge cases" where `==` will fail even though it seems like it shouldn't? and 2) I see that `===` is implemented to check based on class and PK instead, which is more what I'd like. I'm nervous to locally override `==` to alias `===` instead of `eql?` as that seems like it would have bad ripple effects throughout the library. But is there any other way to get things like ruby's enumerable .include? method to work using === instead of == ? Sorry for the very open-ended questions, hope you can help. Thanks! Andrew -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sequel-talk. For more options, visit https://groups.google.com/d/optout.
