1

我希望能够返回User.allcurrent_user作为第一个结果,其余的按字母顺序排序user.name在ActiveRecord_Relation结果中移动项目?

什么是“Rails”的方式来做到这一点?我认为这是将ActiveRecord_Relation转换为数组,然后使用.insert.delete_at的组合将目标用户从其当前位置移动到前端。我想为此创建一个辅助方法吗?还是有一个完全不同的方法?

谢谢!

+1

需要问的问题:你试图用这个来达到什么目的? – BroiSatse 2015-04-01 22:06:49

+0

@BroiSatse我想要列表顶部的当前用户的所有用户的选择下拉列表... – 2015-04-02 00:04:59

+0

我会问“为什么?”但如何填充字段和ajax调用呢?他们键入时会搜索用户名。或者,也许某种延迟加载会起作用。但我很好奇你为什么要这样做。这是一个管理页面吗? – Jeff 2015-04-02 11:53:58

回答

1

不是最 “railsy” 的方式,但这应该工作:

users = User.all.append(User.find(current_user.id)) 
users = (users & users).reverse! 
+1

你可以使用“prepend”而不是“append”来避免“reverse”:-) – Hugo 2017-05-09 16:27:23

1

在一个查询:

users = User.where("id != ?", current_user.id).all.insert(0, User.find(current_user.id))

但是,请记住,它几乎总是一个坏主意打造您的网站在User.all左右的查询...在超过10,000个用户后,您的应用程序将停止响应。无论你在做什么,都应该对结果进行分页。