2014-01-11 5 views
1
에서 단일 쿼리 선택한 요소를 다시 얻기 위해 조인

I가 (레일에서 3.2.13) :두 테이블

class User < ActiveRecord::Base 
    has_many :app_event_login_logouts 
end 

class AppEventLoginLogout < ActiveRecord::Base 
    belongs_to :user 
end 

다시 같은 좀하고 싶습니다 :

AppEventLoginLogoug.select("id, type, users.email").joins(:user) 

기본적으로 ID는 app_event_login_logouts에서 입력하고 사용자로부터 이메일을 보내지 만 작동하지 않는 것 같습니다. 올바른 구문은 무엇입니까?

답변

1

는 다음 코드를 사용해보십시오 :

ret = User.joins(:app_event_login_logouts).select('app_event_login_logouts.id, app_event_login_logouts.type, users.email') 
ret.first.id # will return app_event_login_logouts.id 
ret.first.email # will return users.email 
... 
+0

들으 왜 반대 작업을하지 않습니다? AppEventLoginLogout.joins (: user)와 같은가요? – timpone

+0

차이가 없습니다. 너 그거 해봤 니? 나에게 기계가 작동하고있어. 'AppEventLoginLogout.joins (: user) .select ('app_event_login_logouts.id, app_event_login_logouts.type, users.email') ' –

+1

thx가 작동하지 않으면 이것을 시도해보십시오. 나는 그 콤보를 시도했다고 생각했습니다. 어떤 커피가 필요합니다 ;-) – timpone

1
AppEventLoginLogoug.find(:all, 
         {:include => [:users], 
          :select => ['id', 'type', 'users.email']}) 

가 나는 또한 apidoc을 확인하고 그런 일을 발견 :

result= AppEventLoginLogoug.find(:all, 
           :conditions => ['condition_here'], 
           :joins => [:users], 
           :select => 'whatever_to_select' 
           :order => 'your.order') 
+0

나는 이것이 작동 할 것이라고 생각합니다 :'@ logins_logouts = AppEventLoginLogout.select ([ "id", "user_id, created_at, users.email"]). includes (: user)' – timpone

+0

나는 코드를 편집했는데, 다시 확인해주세요 – bkdir