2014-09-29 7 views
0

자주 실행되는 검색어 (예 : 오류가있는 사용자)의 범위를 만들려고합니다. 문제는 사용자 및 계정 테이블에 가입 한 다음 계정 테이블에서 메서드를 실행하여 어떤 사용자에게 오류가 있는지 찾아야한다는 것입니다. 즉, 오류가있는 계정이있는 사용자를 찾아야합니다. 이 같은 계정 모델에이 범위를 만들 수 있어요 :Rails에서 조인 된 테이블의 메소드를 호출하려면 어떻게해야합니까?

scope :with_errors -> {joins(:user).map(&:status).select{|status| status['code'] == :error}} 
문제가

, 나는 그때로부터 반환되는 액티브 :: 관계에 map(&:status)을 실행할 수 있기 때문에 계정에이 범위를 정의해야 조인 그래서, 내 질문은 : 그것은 내 사용자 모델에서이 범위를 정의 할 수 있도록 "조인 된"테이블에 메서드를 실행할 수 있습니까?

감사합니다.

+1

'status' *는 * 메소드가 될 수 있습니까? 예를 들어 데이터베이스 쿼리를 사용할 수 있다면 훨씬 쉽고 빠릅니다. Account.where (: status_code => 'error') –

+0

아쉽게도 '상태'는 메소드 여야합니다. postgres에'user'를 저장하고 cassandra에'status'를 저장합니다. 그래서 나는 훌륭한 레일 헬퍼를 모두 이용하지 않습니다. 감사! – spinlock

답변

3

This railscast에는 쿼리 병합의 예가 나와 있습니다. 귀하의 경우 그것은 다음과 같습니다 :

User.joins(:accounts).merge(Account.with_errors) 
+0

나는이 대답을 받아 들일 것을 결심했다. 왜냐하면 ... 실제로 ... 질문에 대답하기 때문이다. 나는 셋업이 레일스 헬퍼가 지원하기에는 너무 멀기 때문에 생각한다. – spinlock

+0

아, 스코프를 원한다는 걸 깜빡 했네. 글쎄, 당신이 자주 사용하는 경우, 그냥이 2 않는 범위를 작성하는 것이 사소한 것입니다. –

관련 문제