2009-06-01 16 views
0

免責事項:Ruby on Railsへの私のオリジナルの露出は、文字通り数年前です。これらのうちの1つがスコープと呼ばれています。彼らは素晴らしいようだが、私は期待した結果を得ていない。ここのためのインスタンスです:named_scopeは、次のように新しいオブジェクトを作成しています: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 

それは

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が私にオリジナルのものを与えることを得るのですかどこ?

+1

問題をRailsの2.1と一緒に壊し、その癖であり、スコープ内で使用する場合の結合結果詳細はこちら:http://selfamusementpark.com/blog/2008/07/10/named_scope-joins-includes/ 以下の回答は素晴らしい回避策でした。 – Atiaxi

答えて

3
named_scope :logged_in, 
      :conditions => ["logs.logout_at IS NULL"], 
      :include => :logs 
0

あなたは「管理者」

という名前の複数のユーザーが、この試しているように見えます:それは結局のところ、

User.find_all_by_name('admin') 
+0

悲しいことに、簡単な答えではありません。そのクエリはちょうど1つの結果を返します。私はそこに「本当の」というラベルを付けました。 – Atiaxi

関連する問題