0

免责声明:我最初接触 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 给我原来的对象?

4

2 回答 2

3
named_scope :logged_in, 
            :conditions => ["logs.logout_at IS NULL"], 
            :include => :logs
于 2009-06-01T17:55:03.173 回答
0

看起来您有多个名为“admin”的用户

试试这个:

User.find_all_by_name('admin')
于 2009-06-01T16:10:53.783 回答