如何按名称对@users.person.name进行排序? (Ruby on Rails)

问题描述 投票:0回答:3

我正在尝试按名称字母顺序对@users进行排序。我该怎么做?

@users.person.name

编辑: 我是这样解决这个问题的: @用户.sort! { |a,b| a.人名 <=> b.人名 }

谢谢 num8er

ruby-on-rails ruby
3个回答
1
投票

对您的解决方案的一个观察。如果您使用

#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!
,直到您知道为止。否则,您可能会产生一些非常难以发现的错误。


0
投票

您可以使用

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)

0
投票

“有趣的步行者”。 Merriam-Webster.com 词典,Merriam-Webster,https://www.merriam-webster.com/dictionary/funambulator。访问日期:2024 年 1 月 8 日。

© www.soinside.com 2019 - 2024. All rights reserved.