Rails 4按虚拟属性排序

我有一个Product模型,它在数据库中有namedescription列。

我还有一个Product.search_results_for(query) ,其中query是一个像"Green Apple"这样的字符串。

我需要返回一个ActiveRecord::Relation ,其中排序的结果是最佳命中。 目前,我正在为每个产品设置search_result_valuesearch_result_value不是数据库中的列,我不希望它成为。

所以从本质上讲,我有一个ActiveRecord::Relation Products of Products ,我需要通过search_result_value来订购而不将其更改为数组,这是一个未存储在数据库中的实例变量。 我怎样才能做到这一点?

像这样的东西:

 Product.order(:search_result_value) 

如果您没有将值放在列中或在纯SQL中表达search_result_value中的逻辑,那么您必须将所有Products加载到内存中,然后使用sort_by在Ruby中对它们进行排序:

 Product.all.to_a.sort_by(&:search_result_value)