我在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方法的兼容性。
如果您需要排序,我建议将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
从高到低排序的所有记录。
您可以使用select
和order
方法:
YourModel.select("*, (amount / interval_count) as amount_per_interval")
.order("amount_per_interval")
要访问amount_per_interval
,您只需在加载了上述语句的对象上调用它。
your_model_object.amount_per_interval