jay*_*jay 5 sorting ruby-on-rails ruby-on-rails-3
我想知道如何在Rails中有效地订购.我们都知道您可以使用以下方法在Rails中进行简单排序:
Model.order("created_at ASC").limit(10)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只是拉前10个条目.如果我想添加非时间描述的排序,我可以在模型中创建一个列(例如custom_ordering column)并输入值来排序对象.那种情况你只需修改order("custom_ordering ASC")通话.
但是,假设我想根据用户的预测偏好进行订购.在这种情况下,创建新列是不可行的,因为每个用户都有不同的口味.什么是完成这项任务的智能,有效的方法?
一种方法是创建一个算法来预测用户对来自Model的对象的评级model_rating(object).该算法将吐出其评级的正整数值.如果我沿着这条路走下去,我将如何有效地订购模型?
另一种方法是将算法设置为a model_entry.user_preference(user).然后我可以点击:
Model.all.sort! { |b, a| a.user_preference(user) <=> b.user_preference(user) }
Run Code Online (Sandbox Code Playgroud)
但这让我觉得效率低下.它必须调用模型中的所有条目,然后对它们进行排序,即使您使用合并或冒泡排序等有效排序方法,也会在具有大量条目的模型上获得较差的性能.
还有其他我不考虑的路径吗?任何人都能指出我在正确的方向吗?
在此解决方案中,我假设用户首选订单的计算成本很高,并且您订购的集合不会经常更新。
您可以做的是经常计算订单(在后台任务中)并将计算出的订单存储在每个用户的单独表中。
或者,如果您没有很多用户,您可以将每个用户每个模型的分数保存在单独的表中,并在联接中按该值排序。这些值也可以定期重新计算。
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |