Using dm-core 0.9.11, finder chaining can be broken by the unwary: Zoo.all(:conditions => ["tigers is null or lions is null"]) Above works fine
Zoo.all(:open => true) this also works fine. Assume we define some scopes.... def self.cats_missing all(:conditions => ["tigers is null or lions is null"]) end def self.open all(:open => true) end Now let's say we try this: zoos_open_but_missing_cats = Zoo.open.cats_missing We'll get the expected results. However, try this: zoos_open_but_missing_cats = Zoo.cats_missing.open You'll get some unexpected results, because this query (approx) is getting generated: SELECT * FROM `zoos` WHERE tigers is null or lions is null and `open` = TRUE which gets parsed like this (maybe mysql specific, but this is an orm after all): SELECT * FROM `zoos` WHERE (tigers is null) or ((lions is null) and (`open` = TRUE)) I might be expressing this badly, but I think any call to all or first should be encapsulated prior to chaining so that order doesn't matter. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/datamapper?hl=en -~----------~----~----~----~------~----~------~--~---
