2013-05-13 2 views
0

나는 작업 표와 직원 테이블을 가지고 있습니다. 각 작업 순서에는 할당 된 직원과 감독자가 배정됩니다.다른 외래 키에 조인하는 레일

workorder.rb이있다 : 나는 조인으로 where 절을 만들려고 해요

belongs_to :super, :class_name => "Employee", :foreign_key => "super_id" 
belongs_to :employee 

. :client에 가입하면 문제가 없습니다. 그러나 :super이 작동하지 않습니다.

이 내 현재 시도 :

workorders = workorders.joins(:client,:super).where("wonum like :search or description like :search or clients.client_name like :search or super.employee_full_name like :search ", search: "%#{params[:sSearch]}%") 

내가 다시 얻을 : 도움을

SELECT COUNT(*) FROM "workorders" INNER JOIN "clients" ON "clients"."id" = "workorders"."client_id" INNER JOIN "employees" ON "employees"."id" = "workorders"."super_id" WHERE (wonum like '%CHUCK%' or description like '%CHUCK%' or clients.client_name like '%CHUCK%' or super.employee_full_name like '%CHUCK%') AND (wostatus_id NOT IN (231,230,9263,9264,232)) 
Completed 500 Internal Server Error in 236ms 
ActiveRecord::StatementInvalid - PG::Error: ERROR: missing FROM-clause entry for table "super" 

감사합니다!

employees 테이블은 super 별칭으로되지 않는, 그리고 한 번에 합류 단지이기 때문에이 경우에는 전혀 별명 할 필요가 없습니다

답변

2

: (

workorders = workorders.joins(:client,:super). 
       where("wonum like :search or description like :search or clients.client_name like :search or employees.employee_full_name like :search ", 
       search: "%#{params[:sSearch]}%") 

을 그리고 당신의 정신을 위해서 이 글을 읽는 사람이라면 누구나이 로직을 스코프로 옮겨주세요 :

scope :search, lambda{ |term| 
    %w(wonum description clients.client_name employees.employee_full_name). 
    map{|field| "#{field} like :search" }. 
    join(" or "), search: term 
} 

workorders = workorders.joins(:client, :super).search("%#{params[:sSearch]}%") 
+0

도움에 감사드립니다! – Reddirt

관련 문제