免责声明:我最初接触 Ruby on Rails 确实是几年前的事了,现在我重新开始使用它,很多东西对我来说都是新的。其中之一是命名范围。它们看起来很棒,但我没有得到我期望的结果。这是一个例子:
class User
has_many logs
named_scope :logged_in, :joins => ['logs'], :conditions => ['logs.logout_at IS NULL']
end
Class Log
belongs_to user
end
据我了解,做一个
User.logged_in
应该与做一个完全相同
User.find(:all, :joins => ['logs], :conditions => ['logs.logout_at IS NULL'])
但相反,我得到了不同的对象。展示:
real = User.find_by_name('admin')
#<User id:12345, name: 'admin' ... >
fake = User.logged_in.find_by_name('admin')
#<User id: 54321, name: 'admin' ... >
所以我的问题是:这个新对象到底是从哪里来的,我如何让 named_scope 给我原来的对象?