Rails 4按虚拟属性排序
我有一个Product
模型,它在数据库中有name
和description
列。
我还有一个Product.search_results_for(query)
,其中query
是一个像"Green Apple"
这样的字符串。
我需要返回一个ActiveRecord::Relation
,其中排序的结果是最佳命中。 目前,我正在为每个产品设置search_result_value
。 search_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)