我使用带有PostgeSQL的rails 5,我有2列的模型:
amount: integer
interval_count: integer
我的模型amount_per_interval
中定义的自定义方法基本上返回amount/interval_count
(它在应用级别计算)。现在我需要按这个amount_per_interval
值对整个表进行排序,但我需要在数据库级别上进行排序,因为我使用了分页(而且我还有数百万条记录,所以我不会这样做想把所有这些加载到内存中。)
是否有可能在此型号上定义此类自定义排序?我无法找到任何解决方案。
更新
我基本上想要重写这个SQL:
SELECT (amount / interval_count) as amount_per_interval FROM my_table ORDER BY amount_per_interval
进入ActiveRecord的界面,仍然保持与分页和其他AR方法的兼容性。
答案 0 :(得分:0)
如果您需要进行排序,我建议您在表格中添加amount_per_interval
。您可以在每次插入记录时进行计算。
然后,您可以在SQL查询中执行此操作:
SELECT (...) ORDER BY amount_per_interval
或使用Rails查询界面:
YourModel.order(amount_per_interval: :desc)
生成此查询
SELECT "table_name".* FROM "table_name" ORDER BY "table_name"."amount_per_interval" DESC
这会将amount_per_interval
排序的所有记录从最高到最低加载。
答案 1 :(得分:0)
您可以使用select
和order
方法:
YourModel.select("*, (amount / interval_count) as amount_per_interval")
.order("amount_per_interval")
要访问amount_per_interval
,您只需在加载了上述语句的对象上调用它。
your_model_object.amount_per_interval