2013-08-28 8 views
0

레일 3.2 정유 2.0.10포스트 그레스 오류가

내가 나에게 작품의 목록을 제공해야 내가 방법을 내 컨트롤러에서

Work 
    belongs_to client 

Client 
    has_many works 

내 엔진 사이의 기본적인 관계를 가지고 조인 지정된 클라이언트 (myClientName)에서,하지만 난 메신저 절에서 누락라는 포스트 그레스 오류를 받고 있어요 :

target = "myClientName" 
::Refinery::Works::Work.joins(:client).where(client: {title: target}) 

그리고 오류 :

PG::Error: ERROR: missing FROM-clause entry for table "client" 

나는 내 문제는 활성 기록 문서의 예제에 거의 동일하게 구성되어 있기 때문에 쿼리 생각하지 않는다 : 나는 그것이 네임 스페이스 지정 문제 될 줄 알았는데

time_range = (Time.now.midnight - 1.day)..Time.now.midnight 
Client.joins(:orders).where(orders: {created_at: time_range}) 

하지만 SQL 문 오른쪽 테이블을보고있는 것 같았다. 결코 나는 SQL 전문가이다하지만 난 활성 기록에 의해 생성 된 SQL로 잘못 아무것도 표시되지 않습니다

: SELECT "refinery_works".* FROM "refinery_works" INNER JOIN "refinery_clients" ON   "refinery_clients"."id" = "refinery_works"."client_id" WHERE "client"."title" = 'myClientName' 

어떤 생각이 잘못 여기에 무엇을 갈 수 있을까? 가까이 쿼리에 찾고

답변

1

:

SELECT "refinery_works".* 
FROM "refinery_works" 

이너 여기에 가입 당신이 client 테이블 속성을

WHERE "client"."title" = 'myClientName' 

그래서 본질적를 사용하려고 여기 refinery_clients

INNER JOIN "refinery_clients" ON "refinery_clients"."id" = "refinery_works"."client_id" 

을 말한다 , 쿼리가 잘못되었습니다.
이 문제가 발생할 수있는 가능한 일 :

클라이언트 모델이 다른 테이블을 참조하고 있습니까? self.table_name = 'refinery_clients'? 당신이 정말로 테이블이 client라고 사용하는 일이면

,이 같은 것으로,이 부분을 변경 .where('refinery_clients.title = ?', target)
.where(client: {title: target})
을 시도하거나 .where('client.title = ?', target)