0

免責事項: 私が最初に Ruby on Rails に触れたのは文字通り何年も前のことであり、それを再び取り上げている今、非常に多くのことが私にとって新しいことです。これらの 1 つが名前付きスコープです。素晴らしいようですが、期待した結果が得られません。たとえば、次のようになります。

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 に答える