2014-12-08 5 views
0

Я пытаюсь выбрать всех пользователей, имеющих действительный отдел.ActiveRecord: ошибка синтаксиса нескольких хэш-ситуаций

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

Я получаю ошибку ниже,

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

Я признателен за любую помощь вы можете предоставить

+2

Пола Рихтера ниже правильно. Я просто хотел указать, что конкретная причина SyntaxError заключается в том, что при инициализации Hash двоеточие может использоваться только для ключей Symbol, например. '{foo: 1}' имеет ключ ': foo'. Для ключей, которые являются строками (или другими несимволами), вам нужно использовать «синтаксис толстой стрелки»: '{" foo bar "=> 2}'. Как я уже сказал, ответ Павла имеет решение вашей реальной проблемы. –

ответ

2

К сожалению, вы не можете действительно объединить хэш и строка Active Record варианты вызова метода, как, что ,

Я думаю, что самый чистый подход, чтобы просто сделать два .where вызовов, например, так: ответ

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

* Side Note: * Я никогда не использовал его, но если вам интересно, я считаю, что ['squeel' gem] (https://github.com/activerecord-hackery/squeel) позволяет вам писать AR запросов в Ruby, не прибегая к строкам; поэтому ваш запрос не будет выглядеть так, как будто у вас есть это, но вы можете сделать '> 0' часть довольно легко и красиво. –

+1

Спасибо! Это сработало. squeel выглядит как мощный камень, и я дам попробовать. –