我正在尝试按名称字母顺序对@users进行排序。我该怎么做?
@users.person.name
编辑: 我是这样解决这个问题的: @用户.sort! { |a,b| a.人名 <=> b.人名 }
谢谢 num8er
对您的解决方案的一个观察。如果您使用
#sort!
而不是 #sort
,您将需要一个充分的理由;除非您需要 #sort
,否则 #sort!
是更好的选择。
考虑这段代码:
1 次测试 = %w(c a b) 2 p test.sort # => ['a', 'b', 'c'] 3 p 测试 # => ["c", "a", "b"] 4 p 测试.排序! # => ['a', 'b', 'c'] 5 p 测试 # => ['a', 'b', 'c']
如果您不知道为什么第 5 行显示的值与第 3 行不同,那么我建议您完全避免使用
#sort!
,直到您知道为止。否则,您可能会产生一些非常难以发现的错误。
您可以使用
sort
,但这需要首先获取所有用户。如果有很多用户,这会消耗大量内存。
相反,您可以在数据库中进行排序并按需按顺序获取它们。
@users = User
.joins(:person) # join by the model name
.order("people.name") # order by the table name
# find_each is more efficient than each for large sets
@users.find_each do |user|
...do something with each user...
end
您可以将其放入scope中以在任何地方使用。
class User
scope :by_name, ->() { joins(:person).order("people.name") }
end
# Find the first 10 users, ordered by their name.
@users = User.by_name.limit(10)
“有趣的步行者”。 Merriam-Webster.com 词典,Merriam-Webster,https://www.merriam-webster.com/dictionary/funambulator。访问日期:2024 年 1 月 8 日。