Получить записи, где десятичный атрибут больше 0 в Rails - PullRequest
1 голос
/ 20 июня 2011

У меня есть модель Transaction в приложении Rails 3.1.0.rc4 с десятичным атрибутом amount. У меня есть записи, где атрибут суммы больше 0, а также записи, где атрибут суммы меньше 0. Я хочу получить все записи, где сумма больше 0. В обоих случаях возвращаются все записи, в том числе с отрицательной суммой. Когда я запускаю Transaction.where('amount < 0') или Transaction.where('amount < 0.0'), никакие записи не возвращаются.

Можно ли выполнять эти типы запросов по десятичным атрибутам?

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Вы пробовали это?

Transaction.where('amount > ?', 0.0)
1 голос
/ 20 июня 2011

Проблема связана с SQLite и вашими миграциями - если вы откроете базу данных SQLite и запустите SELECT typeof(amount) FROM transactions LIMIT 1, вы увидите, что Rails создает ваше десятичное поле как тип BLOB вместо десятичного типа REAL.

Я не уверен, является ли это ошибкой в ​​Rails или нет, но на данный момент вы можете обойти ее, приведя сумму в предложении where:

Transaction.where("CAST(amount AS REAL) > 0")

Вы также можете обойти этоиспользуя прямой SQL в своей миграции с методом execute для создания amount в качестве поля REAL для начала (см. http://api.rubyonrails.org/classes/ActiveRecord/Migration.html).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...