Rails 4按虚拟属性排序

时间:2013-08-18 04:43:07

标签: ruby-on-rails ruby activerecord ruby-on-rails-4

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

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

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

所以从本质上讲,我需要Products search_result_value Product.order(:search_result_value) 我需要按{{1}}排序而不将其更改为数组,这是一个未存储的实例变量数据库。我怎么能这样做?

这样的事情:

{{1}}

1 个答案:

答案 0 :(得分:6)

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

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