2009-09-26 2 views
2

나는 다음과 같은 모델이 있습니다레일 오류 : + 포함 조인

Image.find(:all, :conditions => ["images.person_id = ? AND preferences.image_privacy = ?", user.id, PRIVACY_PUBLIC], 
       :joins => [:person => :user_preference], :include => :person) 
:

class Person < ActiveRecord::Base 
has_many :images 
has_one :preference 
end 

class Image < ActiveRecord::Base 
belongs_to :person 
end 

class Preference < ActiveRecord::Base 
belongs_to :person 
end 

내가 공공의 모든 이미지를 가져 오기 위해 노력하고 동시에 열망 부하에서하고 그 이미지를 소유 한 사람들

레일스는 다음을 좋아하지 않습니다 : include (나는 2 명의 모델에서 사람이 참조 되었기 때문에 믿습니다).

"액티브 :: StatementInvalid : MySQL의 : 오류 : 독특한하지 테이블/별칭 : '사람'"

내가 얻을 수있는이 (: 옵션을 포함 나는 드롭 할 때 사라지는) 내가 오류입니다 실제 JOIN 명령을 문자열로 작성하고 : include 옵션에 전달하면 Rails-y가 아닌 깨끗한 방법으로이 작업을 수행 할 수 있습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

당신이 여기에 SQL 쿼리를 붙여 넣을 수 있습니다 시도 할 수 있습니다 조건을 사용

, 당신의 로그 –

답변

-1

JOIN을 사용하면 사용자 테이블을 적극적으로 포함하므로 "포함"을 다시 추가 할 필요가 없습니다. 이 작동합니다 :

Image.find(:all, :conditions => ["images.person_id = ? AND preferences.image_privacy = ?", user.id, PRIVACY_PUBLIC], 
      :joins => [:person => :user_preference]) 
+2

에 그것을 볼 수 있어야하는 것은 올바르지 않습니다. –

0

그것은 표 앨리어싱의 문제가 될 수도, 문서도 여기에 포스트 SQL도 도움이 될 것입니다 Table Aliasing

좋은 세부 정보를 가지고 레일.

1

user_preferences가 아닌 "환경 설정"이라고합니다. 그래서 당신이해야 가입 : 당신이 쓴

:joins => [:person => :preference]) 
-1

: 조건 => [ "images.person_id"user.id] 당신은 당신이 이미지와 사람들이 그 이미지를 소유을로드 할 것이라고 말했다. 그러나 하나의 user.id 만 지정했기 때문에 한 사람에게 속한 이미지를로드하는 것처럼 보입니다 (사람 그룹이 아님). 그것은 사람을로드하고 그/그녀의 이미지 것

Person.find(user.id, :include => [:images, :preference], :conditions => ["preferences.image_privacy = ?", PRIVACY_PUBLIC]) 

:

나는 이런 식으로 할 것이다.

아마 당신의 문제를 올바르게 이해하지 못합니다. 당신이하고 싶은 생각이 내게 논리가 아니기 때문일 수 있습니다. 열망 로딩을하지 않는 조인 이후 대신 당신이 named_scope