Disclaimer: Meine ursprüngliche Exposition gegenüber Ruby on Rails war buchstäblich vor Jahren, und eine große Menge Dinge sind neu für mich jetzt, dass ich es wieder abholen. Eines dieser Dinge nennt man Bereiche. Sie scheinen großartig, aber ich bekomme nicht das Ergebnis, das ich erwarte. Hier ist ein for-Beispiel:named_scope erstellt neue Objekte, wenn ich es mit einem verwende: Join
class User
has_many logs
named_scope :logged_in, :joins => ['logs'], :conditions => ['logs.logout_at IS NULL']
end
Class Log
belongs_to user
end
Es ist mein Verständnis, dass ein
User.logged_in
genau das tun, soll das gleiche wie tut ein
User.find(:all, :joins => ['logs], :conditions => ['logs.logout_at IS NULL'])
Aber stattdessen ich bin immer wieder verschiedene Objekte. Um zu demonstrieren:
real = User.find_by_name('admin')
#<User id:12345, name: 'admin' ... >
fake = User.logged_in.find_by_name('admin')
#<User id: 54321, name: 'admin' ... >
Also meine Frage ist: Wo auf der Erde dieses neue Objekt herkommt, und wie bekomme ich named_scope geben Sie mir das Original?
Das Problem, wie sich herausstellt, ist mit Rails 2.1 und seine Gewohnheit zusammen zu zerschlagen die Ergebnisse von Joins, wenn Sie sie in Bereichen verwenden. Detaillierte hier: http://selfamusementspark.com/blog/2008/07/10/named_scope-joins-includes/ Die Antwort unten war eine hervorragende Problemumgehung! – Atiaxi