Это:
.where(:price != 0.00)
- это то же самое, что сказать:
.where(true)
как Символ никогда не будет равняться Флоату; where(true)
бессмысленно, поскольку он просто добавляет истинный литерал вашей базы данных ('t'
для PostgreSQL, 1
в SQLite и MySQL) к предложению WHERE, и это ничего не дает; например, если вы говорите:
Transaction.where(:company_id => company).where(:price != 0.00)
тогда ваш SQL будет выглядеть так в PostgreSQL:
select * from transactions where company_id = #{company} and 't'
и это то же самое, что просто сказать
select * from transactions where company_id = #{company}
Когда запрос вводит вас в заблуждение, иногда полезно добавить .to_sql
в конце в консоли Rails и посмотреть, что в итоге делает SQL (и если вы не знаете SQL, вам следует изучить его, если вы намерены использовать реляционную базу данных в любом качестве).
Вы хотите отправить сравнение в базу данных, а не делать это внутри Ruby:
price = Transaction.where(:company_id => company)
.where('price != ?', 0)
Я предполагаю, что ваш столбец price
является десятичным типом, а не типом с плавающей запятой; если я ошибаюсь, измените его на десятичное прямо сейчас.