2009-06-01 3 views
0

면책 조항 : Ruby on Rails에 대한 본래의 경험은 문자 그대로 수 년전이었습니다. 이 중 하나는 스코프라고합니다. 그들은 훌륭해 보이지만, 나는 기대했던 결과를 얻지 못하고있다.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

문제, 함께 레일 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

슬프게도, 쉬운 대답은 아닙니다. 그 쿼리는 정확히 하나의 결과를 반환합니다. – Atiaxi