如何按自定义方法对表进行排序



我在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从高到低排序的所有记录。

您可以使用selectorder方法:

YourModel.select("*, (amount / interval_count) as amount_per_interval")
.order("amount_per_interval")

要访问amount_per_interval,您只需在加载了上述语句的对象上调用它。

your_model_object.amount_per_interval

最新更新