2014-12-08 2 views
0

유효한 부서가있는 모든 사용자를 선택하려고합니다. 내가 어떤 도움을 주셔서 감사합니다 ActiveRecord : 다중 해시 조건 구문 오류

syntax error, unexpected ':', expecting => ...accounts.dept_id > ?": 0 }) 

당신이 불행하게도

+2

폴 리히터의 답변이 정확합니다. SyntaxError의 특별한 이유는 해시를 초기화 할 때 콜론은 Symbol 키에만 사용할 수 있다는 것입니다. '{foo : 1}'은 (는) 키': foo'를 가지고 있습니다. 문자열 (또는 다른 비 기호) 키의 경우 "굵은 화살표 구문":'{ "foo bar"=> 2}'을 사용해야합니다. 제가 말했듯이, 바울의 답은 당신의 실제 문제에 대한 해결책을 가지고 있습니다. –

답변

2

를 제공 할 수 있습니다 나는 아래의 오류가

User 
.joins(orders: [{ order_lines: :accounts}]) 
.where(users: {id: @user}, accounts: { "accounts.dept_id > ?": 0 }) 

, 당신이 정말로 같은 해시 및 문자열 액티브 레코드 메소드 호출 변종을 결합 할 수 없습니다 .

내가 가장 깨끗한 방법은 간단과 같이, 두 .where 통화를 할 생각 아래

...where(users: {id: @user}).where("accounts.dept_id > ?", 0) 
+0

* 사이드 노트 : * 한번도 사용해 본 적이 없지만 관심이 있으시면 ['squeel' gem] (https://github.com/activerecord-hackery/squeel)을 사용하여 AR을 작성할 수 있다고 생각합니다. 문자열에 의존하지 않고 Ruby에서 쿼리하기. 그래서 당신의 쿼리는 당신이 가진 것처럼 보이지는 않을 것입니다,하지만 당신은'> 0' 부분을 아주 쉽고 멋지게 할 수 있습니다. –

+1

감사! 그게 효과가 있었어. 끽끽 소리는 강력한 보석처럼 보이고 나는 그것을 시도 할 것입니다. –