2011-11-05 3 views
0

가 어떻게이 경우에는 활동 기록을 사용 레일 그들의 테이블.레일 활성 레코드 제외 쿼리는 3.1

나는 관리자 테이블에

참고 설정 USER_ID이없는 모든 사용자를 선택 싶습니다 이것은 단지 예를 들어 케이스입니다. 이것이 실제 사례라면 당연히 사용자와 관리자를위한 두 개의 다른 테이블을 가지지 않을 것입니다.

편집 : 다시 말하지만, 나는 이것이 끔찍한 db 디자인 인 것처럼 그것을하는 의미를 알고 있습니다.

답변

1

당신은 NOT IN 포함 :conditions를 사용할 수 있습니다

class User < ActiveRecord::Base 
    scope :not_admin, lambda { |admins| { :conditions => ['user_id not in (?)', admins.select(&:id).join(',')] } 
end 
:

User.find(:all, :conditions => ['user_id not in (?)', @admins.map(&:id)]) 

또는 당신이 사용자의 scope (일명 named_scope 이전 3.X를 레일)로 코딩 할 수 있습니다

그리고 다음과 같이 사용하십시오 :

User.not_admin(@admins) 

또는 당신이 joins을 사용할 수 있습니다 통과 @admins중인 변수에 의존하지 않기 위해 :

class User < ActiveRecord::Base 
    scope :not_admin, joins(:admin).where(:admins => { :user_id => nil }) 
end 
+0

이 내가이'그래서 난에 넣을 수 scope' 것을 만들 수있는 방법이 있나요 컨트롤러 대신 모델? – Hopstream

+0

옙, 그 대답은 다음과 같습니다 :) – tolitius

+0

작동하지 않는 것처럼 보입니다 - 잘못된 인수 (0을 1로 입력)가 계속 발생합니다. 오류 – Hopstream